unordered_set unordered_map example c++11 unordered-map

c++11 - example - En unordered_map de C++ 11, ¿cómo actualizar el valor de una clave en particular?



unordered_map c++ example (2)

En el hashmap de Java:

map.put(key, new_value)

actualizará la entrada de key = key con new_value si existe en el hashmap.

¿Cuál es la forma correcta de hacer algo similar en unordered_map de C ++ 11?

No he encontrado una API como updateXXX, y la documentación dice que la función unordered_map :: insert solo tendrá éxito cuando no haya un par de ellos con una clave.


Pensé que map.put de Java insertó el elemento si no estaba ya en el mapa y lo actualizó si estaba en el mapa, ver put :

poner

V puesto público (clave K, valor V)

Asocia el valor especificado con la clave especificada en este mapa. Si el mapa contenía previamente una asignación para la clave, se reemplaza el valor anterior.

Esto sería equivalente a unordered_map::operator[] :

Si k coincide con la clave de un elemento en el contenedor, la función devuelve una referencia a su valor asignado.

Si k no coincide con la clave de ningún elemento en el contenedor, la función inserta un nuevo elemento con esa clave y devuelve una referencia a su valor asignado. Tenga en cuenta que esto siempre aumenta el tamaño del contenedor en uno, incluso si no se asigna ningún valor asignado al elemento (el elemento se construye utilizando su constructor predeterminado).


Si sabe que la clave está en el mapa, puede utilizar el operator[] que devuelve una referencia al valor asignado. Por lo tanto, será map[key] = new_value . Sin embargo, tenga cuidado, ya que esto insertará un (key, new_value) si la clave aún no existe en el mapa.

También puede usar la find que devuelve un iterador al valor:

auto it = map.find(key) if(it != map.end()) it->second = new_value;