0

ブースト unordered_map を使用する場合、map[key] を実行すると、返される型は値 V への参照または値のコピーになりますか?

ありがとう

4

4 に答える 4

2

ドキュメントによると、それは参照であるように見えます。

mapped_type& operator[](key_type const& k);
于 2012-10-30T15:07:07.123 に答える
2

これは参照です。それ以外の場合、これは機能しません。

map[key] = value;
于 2012-10-30T15:06:01.420 に答える
1

Boostのドキュメントから:

mapping_type& operator[](key_type const& k);

効果:
コンテナーに k に相当するキーを持つ要素がまだ含まれていない場合、値 std::pair(k, mapped_type()) を挿入します。

戻り値:
x.second への参照。ここで、x はコンテナー内に既に存在する要素、または k に相当するキーを持つ新しく挿入された要素です。

スロー:
hasher の呼び出し以外の操作によって例外がスローされた場合、関数は無効になります。

注: イテレータを無効にすることができますが、挿入によって負荷係数が最大負荷係数以上になる場合に限ります。

要素へのポインターと参照が無効になることはありません。

于 2012-10-30T15:11:59.947 に答える
0

アクセサー演算子[]は常に参照を返します。マップ要素が存在しない場合は作成されます。したがって、検索の繰り返しを避けるには、次のパターンが役立ちます。

std::unordered_map<K, T> m = populate_me();

T & value = m[key];   // created if non-existent

// use "value" rather than repeated "m[key]"
于 2012-10-30T15:21:38.167 に答える