Dans la table de hachage de Java:
map.put(key, new_value)
mettra à jour l'entrée de key = key avec new_value si elle existe dans le hashmap.
Quelle est la bonne façon de faire la même chose dans unordered_map de C++ 11?
Je n'ai pas trouvé d'API comme updateXXX, et la documentation indique que le unordered_map :: insert La fonction ne réussira que s'il n'y a pas de paire avec une clé.
Si vous savez que la clé se trouve sur la carte, vous pouvez utiliser operator[]
qui renvoie une référence à la valeur mappée. Ce sera donc map[key] = new_value
. Soyez prudent, car cela insérera un (key, new_value)
si la clé n'existe pas déjà dans la carte.
Vous pouvez également utiliser find
qui renvoie un itérateur à la valeur:
auto it = map.find(key)
if(it != map.end())
it->second = new_value;
Si le type value
n'a pas de constructeur par défaut, vous pouvez utiliser:
map.emplace(key, new_value).first->second = new_value;
Cela présente également tous les autres avantages de l'opérateur et de l'insertion en place vs [].
Je pensais que Java map.put
a inséré l'élément s'il n'était pas déjà dans la carte et l'a mis à jour s'il était dans la carte, voir put:
mettre
put V public (touche K, valeur V)
Associe la valeur spécifiée à la clé spécifiée dans cette carte. Si la carte contenait auparavant un mappage pour la clé, l'ancienne valeur est remplacée.
Ce serait équivalent à nordered_map :: operator [] :
Si k correspond à la clé d'un élément du conteneur, la fonction renvoie une référence à sa valeur mappée.
Si k ne correspond à la clé d'aucun élément du conteneur, la fonction insère un nouvel élément avec cette clé et renvoie une référence à sa valeur mappée. Notez que cela augmente toujours la taille du conteneur d'une unité, même si aucune valeur mappée n'est affectée à l'élément (l'élément est construit à l'aide de son constructeur par défaut).