2016-07-11 6 views
-2

私はいくつかの値を持つマップを持っています。次に、いくつかの文字列を返す関数があり、この文字列はマップ内のキーのメンバーになります。私は、キーに基づいて値を取得し、それを引数として取る別の関数に渡す必要があります。C++のマップから値を取得する方法

map<string,int> SymbolTable; 
SymbolTable["R0"]=0; 
SymbolTable["R1"]=1; 
SymbolTable["R2"]=2; 
SymbolTable["R3"]=3; 

string value=getValue(); //this one will return something from R0 to R3 
nextFunction(SymbolTable[value]); // this part is wrong 

私が値== "R0"または静的な値を与えた場合、これは期待どおりに機能しています。しかし、この動的な値を渡すたびに、常に0が返されるので、nextFunctionは引数として0をとります。 getValue()から戻り値を出力しようとしましたが、戻り値が正しいかどうか確認しています。私はthisと同様の方法を試しましたが、すべて私に同じ問題があります。ここで間違っていることについて誰かが私を導くことができますか? TIY

答えて

1

値== "R0"または静的な値を指定した場合、これは と予想されます。しかし、この動的値を渡すたびに常に0を返します。

これは、取得した「動的値」がマップのキーとして存在しないことを意味します。 std::mapoperator []は、関連付けられたキーが存在しない場合にデフォルトの構成値を挿入します。あなたが行うことができます

マップ内valueが存在するかどうかを確認するには、:

string value=getValue(); 
if(SymbolTable.count(value)){ 
    //key exists.... 
    nextFunction(SymbolTable[value]); // this part should be correct now 
} 

またはあなたが均等にstd::map::find

+0

は 'のstdを使用する方法を言及するおそらく価値があるだろう使用することができます::マップ: :find() '、この問題を修正しました。 –

+0

getValue()から戻り値を出力しようとしましたが、これは私が期待しているものです – tuxebin

+1

@πάνταῥεῖ、ありがとうございます。完了しました。しかし、私は 'count()'にバイアスを持っています:-) – WhiZTiM

関連する問題