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
を使用することもできます。
auto it = map.find(key)
if(it != map.end())
it->second = new_value;
タイプvalue
にデフォルトのコンストラクターがない場合は、次を使用できます。
map.emplace(key, new_value).first->second = new_value;
これには、emplaceと[]演算子および挿入のその他すべての利点もあります。
私はJavaのmap.put
要素がまだマップにない場合は挿入し、マップにある場合は更新しました。putを参照してください:
プット
公開V put(Kキー、V値)
指定された値をこのマップの指定されたキーに関連付けます。マップに以前にキーのマッピングが含まれていた場合、古い値が置き換えられます。
これは nordered_map :: operator [] と同等です。
Kがコンテナ内の要素のキーと一致する場合、関数はマップされた値への参照を返します。
kがコンテナ内のどの要素のキーとも一致しない場合、関数はそのキーを持つ新しい要素を挿入し、そのマッピングされた値への参照を返します。これにより、マッピングされた値が要素に割り当てられていない場合でも、常にコンテナサイズが1増加します(要素はデフォルトのコンストラクターを使用して構築されます)。