2

次のマップ構造があります。

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

    }

私は地図ライブラリを使用する初心者です。

4

1 に答える 1

4

私が間違っていると思う唯一のことは、オブジェクトが必要なことです:

    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 を使用することもできます。

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 ));
}
于 2012-05-14T19:03:56.930 に答える