我有这个基于结构的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);
}
但我不确定这是否正确。有什么建议吗?
答案 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
,除非您需要有效访问给定状态的所有触发器。