31

Java のハッシュマップ:

map.put(key, new_value) 

ハッシュマップに存在する場合、key=key のエントリを new_value で更新します。

C++11 の unordered_map で同様のことを行う正しい方法は何ですか?

updateXXX のような API は見つかりませんでした。ドキュメントによると、unordered_map::insert関数はキーとのペアが存在しない場合にのみ成功します。

4

4 に答える 4

50

キーがマップにあることがわかっている場合はoperator[]、マップされた値への参照を返すを利用できます。したがって、 になりますmap[key] = new_value(key, new_value)ただし、キーがまだマップに存在しない場合はが挿入されるので注意してください。

find値に反復子を返す which を使用することもできます。

auto it = map.find(key)
if(it != map.end()) 
    it->second = new_value;
于 2013-04-30T03:58:47.110 に答える
1

Javamap.putは要素がまだマップにない場合は要素を挿入し、マップにある場合は更新したと考えました。put を参照してください

put

public V put(K key, V value)

指定された値をこのマップ内の指定されたキーに関連付けます。マップに以前にキーのマッピングが含まれていた場合、古い値が置き換えられます。

これはunordered_map::operator[]と同等です:

k がコンテナー内の要素のキーと一致する場合、関数はマップされた値への参照を返します。

k がコンテナー内のどの要素のキーとも一致しない場合、関数はそのキーを持つ新しい要素を挿入し、マップされた値への参照を返します。これにより、マップされた値が要素に割り当てられていない場合でも、コンテナーのサイズが常に 1 増加することに注意してください (要素は既定のコンストラクターを使用して構築されます)。

于 2013-04-30T06:58:19.567 に答える