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
4

2 に答える 2

1

問題[]const、イテレータの性質です。[]演算子は notであるため、代わりに使用し、返されるイテレータを逆参照するconst必要があります。find(keyword)

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

非定数イテレータに切り替えて を使用することもできます[]

于 2012-04-16T10:31:39.820 に答える
1

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

(itr->second).at(keyword)

at() と operator[] の違いは、at() が追加の範囲チェックを行い、失敗すると out_of_range 例外をスローすることです。

于 2012-04-16T11:46:21.053 に答える