2012-05-17 94 views
0

的矢量I具有這種結構基於多重映射和用於該結構中的載體:將值插入多重映射

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

但我不確定它是否正確。有什麼建議麼?

回答

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,除非您需要有效訪問給定狀態的所有觸發器。

+0

什麼是邊緣:'std :: map 轉換;'? – franvergara66

+0

對不起,我改變了typedef,但忘了改變它的用法。我現在修好了。 –

+0

我試圖去適應Konrad Rudolph提出的[僞代碼](http://stackoverflow.com/questions/10626414/design-a-nondeterministic-finite-automata-in-c-incorrect-output/10633733#comment13798618_10633733) – franvergara66