0

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

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

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

4

1 回答 1

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,除非您需要有效访问给定状态的所有触发器。

于 2012-05-17T23:14:29.680 回答