Le seul moyen que j’ai trouvé pour vérifier les doublons est d’insérer et de vérifier le std::pair.second
pour false
, mais le problème est que cela insère toujours quelque chose si la clé est inutilisée, alors que je veux un map.contains(key);
function.
Utilisez my_map.count( key )
; il ne peut que renvoyer 0 ou 1, ce qui correspond essentiellement au résultat booléen souhaité.
Sinon, my_map.find( key ) != my_map.end()
fonctionne aussi.
La réponse de Potatoswatter est correcte, mais je préfère utiliser find
ou lower_bound
à la place. lower_bound
est particulièrement utile car l'itérateur renvoyé peut ensuite être utilisé pour une insertion indicée, si vous souhaitez insérer quelque chose avec la même clé.
map<K, V>::iterator iter(my_map.lower_bound(key));
if (iter == my_map.end() || key < iter->first) { // not found
// ...
my_map.insert(iter, make_pair(key, value)); // hinted insertion
} else {
// ... use iter->second here
}