ブースト unordered_map を使用する場合、map[key] を実行すると、返される型は値 V への参照または値のコピーになりますか?
ありがとう
ブースト unordered_map を使用する場合、map[key] を実行すると、返される型は値 V への参照または値のコピーになりますか?
ありがとう
ドキュメントによると、それは参照であるように見えます。
mapped_type& operator[](key_type const& k);
これは参照です。それ以外の場合、これは機能しません。
map[key] = value;
Boostのドキュメントから:
mapping_type& operator[](key_type const& k);
効果:
コンテナーに k に相当するキーを持つ要素がまだ含まれていない場合、値 std::pair(k, mapped_type()) を挿入します。戻り値:
x.second への参照。ここで、x はコンテナー内に既に存在する要素、または k に相当するキーを持つ新しく挿入された要素です。スロー:
hasher の呼び出し以外の操作によって例外がスローされた場合、関数は無効になります。注: イテレータを無効にすることができますが、挿入によって負荷係数が最大負荷係数以上になる場合に限ります。
要素へのポインターと参照が無効になることはありません。
アクセサー演算子[]
は常に参照を返します。マップ要素が存在しない場合は作成されます。したがって、検索の繰り返しを避けるには、次のパターンが役立ちます。
std::unordered_map<K, T> m = populate_me();
T & value = m[key]; // created if non-existent
// use "value" rather than repeated "m[key]"