2012-04-16 9 views
1

SOの周りを見渡して、必要なものを見つけられませんでした。私は外部の地図からキーを引き出す方法を探していて、出力ステートメントの中で使うために内部のマップからの値を探しています。 1つのマップがある場合は、insideMap[key]を使用して、必要なデータを内側のマップから引き出すことができます。しかし、[] operatorはこの実装では動作しないようです((*itr).second)[keyword]ネストされたマップから値を引き出す

map< string, map<string, int> >::const_iterator itr; 
for(itr=books.begin(); itr!=books.end(); ++itr) 
    //code I need here 
+2

'operator []'は、まだ存在しない場合は新しい値を挿入してマップを変更します。だからあなたは 'const_iterator'でそれを使うことはできません。 –

答えて

1

[]に問題があなたのイテレータのconst -nessです:[]オペレータは、あなたの代わりにfind(keyword)を使用する必要があるので、constないが、それが返すことイテレータを逆参照:

*(((*itr).second).find(keyword)) 

あなたは非constイテレータに切り替えて[]を使用することもできます。

+0

ありがとうございます。私は私の地図を台無しにしたくないので、私は非コンスの反復子を使用したくないと思った。それから私は自分のマップを他のものに使用していないことに気付きました。そして、デフォルトのコンストラクションは害より多くの助けになります。 – AnthonyW

1

演算子[]の代わりにstd :: map :: at()を使用できます。 at()はoperator []のようなキーの値を返しますが、at()のconstバージョンがあります。

(itr->second).at(keyword) 

(ATとの間の差)と、オペレータは、[]()に追加の範囲チェックを行い、それが失敗した場合にout_of_range例外をスローすることです。

+0

お役立ち情報ありがとう! – AnthonyW

関連する問題