插入一对成地图在C + +(Insert pair into map in c++)

2019-09-17 04:57发布

我有以下的地图结构:

std::map<std::pair<int, char>, int> transitions;

表示非确定性自动机的过渡,每个具有2个整数和字符,I,J和C,表示其中过渡,即,从状态变为状态i到与字符C.状态j

0 0 a
0 1 a
1 1 b
1 2 c
1 3 c
3 4 d
4 4 d
4 5 d

我想插入它。 我该怎么办?

我想过做以下几点:

typedef map<pair<int, char>, int> transitions;
    for (j=0; j<numberTransitions;j++)
    {

        cin>> stateOrigin>>stateDestination>>transitionCharacter;
        transitions.insert(transitions::value_type(std::make_pair(stateOrigin,transitionCharacter), stateDestination ));

    }

我不认为是这样做的方式,我是新手使用地图库。

Answer 1:

我看到错误的唯一的事情是,你需要一个对象:

    transitions.insert(transitions::value_type(std::make_pair(stateOrigin,transitionCharacter), stateDestination ));
    ^^^^^^^^^^^   is a type


    /// Should be 
    transitions   trans;

    // Then later in the loop.
    trans.insert(transitions::value_type(std::make_pair(stateOrigin,transitionCharacter), stateDestination ));

你甚至可以把它更进一步,使用key_type的,而不是做对:

trans.insert(transitions::value_type(transitions::key_type(stateOrigin,transitionCharacter), stateDestination ));

// or
for(/*STUFF*/)
{
    typedef transitions::value_type  value_type;
    typedef transitions::key_type    key_type;
    trans.insert(value_type(key_type(stateOrigin,transitionCharacter), stateDestination ));
}


文章来源: Insert pair into map in c++