Java のハッシュマップ:
map.put(key, new_value)
ハッシュマップに存在する場合、key=key のエントリを new_value で更新します。
C++11 の unordered_map で同様のことを行う正しい方法は何ですか?
updateXXX のような API は見つかりませんでした。ドキュメントによると、unordered_map::insert関数はキーとのペアが存在しない場合にのみ成功します。
Java のハッシュマップ:
map.put(key, new_value)
ハッシュマップに存在する場合、key=key のエントリを new_value で更新します。
C++11 の unordered_map で同様のことを行う正しい方法は何ですか?
updateXXX のような API は見つかりませんでした。ドキュメントによると、unordered_map::insert関数はキーとのペアが存在しない場合にのみ成功します。
キーがマップにあることがわかっている場合はoperator[]
、マップされた値への参照を返すを利用できます。したがって、 になりますmap[key] = new_value
。(key, new_value)
ただし、キーがまだマップに存在しない場合はが挿入されるので注意してください。
find
値に反復子を返す which を使用することもできます。
auto it = map.find(key)
if(it != map.end())
it->second = new_value;
Javamap.put
は要素がまだマップにない場合は要素を挿入し、マップにある場合は更新したと考えました。put を参照してください。
put
public V put(K key, V value)
指定された値をこのマップ内の指定されたキーに関連付けます。マップに以前にキーのマッピングが含まれていた場合、古い値が置き換えられます。
これはunordered_map::operator[]と同等です:
k がコンテナー内の要素のキーと一致する場合、関数はマップされた値への参照を返します。
k がコンテナー内のどの要素のキーとも一致しない場合、関数はそのキーを持つ新しい要素を挿入し、マップされた値への参照を返します。これにより、マップされた値が要素に割り当てられていない場合でも、コンテナーのサイズが常に 1 増加することに注意してください (要素は既定のコンストラクターを使用して構築されます)。