将值插入到多图的矢量中

时间:2012-05-17 23:00:41

标签: c++ stl multimap

我有这个基于结构的multimap和这个结构的向量:

typedef std::multimap<char, int> tr;
vector <tr> transitions;

我想用以下值填充数组:

0 0 a
0 1 a
1 1 b
1 2 c
1 3 c

表示自动机的转换,我使用std :: multimap的向量进行转换。这假设每个状态对应一个整数。我怎么能这样做?我试试:

for (j=0; j<numberTransitions;j++){
    cin>> stateOrigin>>stateDestination>>transitionCharacter;
    transitionsStates.insert(pair<char, int>(transitionCharacter, stateDestination));
    transitions.push_back (transitionsStates);
}

但我不确定这是否正确。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你永远不会使用stateOrigin,所以我很确定这是错的(除非我完全误解了你的意图)。我想你想要的更像是这样:

typedef std::pair<int, char> trigger;
std::map<trigger, int> transitions;
⋮
transitions.insert(make_pair(make_pair(orig, chr), dest));

要驱动状态机,您可以使用以下内容:

auto newState = transitions.find(make_pair(oldState, inputChar));
if (newState != transitions.end()) {
    state = newState;
}

另请注意,使用C ++ 11时,您可能希望使用std::unordered_map,除非您需要有效访问给定状态的所有触发器。