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 ++ 11std::unordered_mapでは、特定の状態のすべてのトリガーに効率的にアクセスする必要がない限り、代わりに使用することをお勧めします。

于 2012-05-17T23:14:29.680 に答える