在 c++ 中将对插入到映射中

Insert pair into map in c++

本文关键字:映射 插入 c++      更新时间:2023-10-16

我有以下地图结构:

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

这表示非确定性自动机的转换,每个自动机有 2 个整数和一个字符 I、J 和 C,表示转换的状态,即从状态 i 到状态 J 的转换,字符 C 。

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 ));
    }

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

我唯一看错的是你需要一个对象:

    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 ));
}