【问题标题】:Insert pair into map in c++在c ++中将对插入地图
【发布时间】:2012-05-22 06:52:12
【问题描述】:

我有以下地图结构:

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

    }

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

【问题讨论】:

  • 那么,当你尝试这个时发生了什么?
  • @OliCharlesworth 编译器告诉我以下内容:C:\testMap.cpp | |在函数`int main()'中:|第 30 行:错误:“。”之前的预期不合格 ID令牌 |第 30 行是我尝试插入的位置。

标签: c++ dictionary insert mapping


【解决方案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 而不是 make pair:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 2018-06-28
    • 2011-01-17
    • 2017-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多