Search code examples
c++stlmultimap

Inserting values into a vector of multimap


I have this structure based multimap and a vector for this structure:

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

I want to fill the array with values ​​like:

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

which represent the transitions of an automaton, and i use a vector of std::multimap for the transitions. This assumes that each state corresponds to an integer. How I could do this?. I try:

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

But I'm not sure if it's correct. Any suggestions?


Solution

  • You never use stateOrigin, so I'm pretty sure it's wrong (unless I've completely misunderstood your intent). I think what you want is more like this:

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

    To drive the state machine, you'd use something like this:

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

    Also note that with C++11 you probably want to use std::unordered_map instead, unless you need efficient access to all the triggers for a given state.