625 votes

Comment trouver si une clé donnée existe dans un std::map C++

Je suis en train de vérifier si la valeur est dans une carte et un peu ne peut pas le faire :

alors, comment je peux imprimer ce qui est dans p ?

390voto

DavidRR Points 2211

Pour vérifier si une touche particulière dans la carte existe, utilisez l' count fonction membre de l'une des manières suivantes:

m.count(key) > 0
m.count(key) == 1
m.count(key) != 0

La documentation pour l' map::find dit: "une Autre fonction membre, map::count, peut être utilisé pour simplement vérifier si une clé existe."

La documentation pour l' map::count dit: "Parce que tous les éléments d'une carte conteneur sont uniques, la fonction ne peut retourner 1 (si l'élément est trouvé) ou zéro (dans le cas contraire)."

Pour récupérer une valeur à partir de la carte par l'intermédiaire d'une clé que vous savez d'exister, l'utilisation de la carte:::

value = m.at(key)

Contrairement à la carte::operator[], map::at ne va pas créer une nouvelle clé dans la carte si la clé spécifiée n'existe pas.

55voto

Andreas Bonini Points 15709

Vous pouvez utiliser .find() :

 map<string,string>::iterator i = m.find("f");

if (i == m.end()) { /* Not found */ }
else { /* Found, i->first is f, i->second is ++-- */ }
 

20voto

aJ. Points 17014
 m.find == m.end() // not found
 

Si vous souhaitez utiliser d'autres API, recherchez go pour m.count(c)>0

  if (m.count("f")>0)
      cout << " is an element of m.\n";
    else 
      cout << " is not an element of m.\n";
 

13voto

Steve Jessop Points 166970

Je pense que vous souhaitez map::find. Si m.find("f") est égal à m.end(), alors la clé n'a pas été trouvé. Sinon, trouvez retourne un itérateur pointant sur l'élément trouvé.

L'erreur est parce qu' p.first est un itérateur, qui n'a pas de travail pour le volet insertion. Changer votre dernière ligne de cout << (p.first)->first;. p est une paire d'itérateurs, p.first est un itérateur, p.first->first est la clé de la chaîne.

Une carte ne peut jamais avoir qu'un élément pour une clé donnée, de sorte equal_range n'est pas très utile. Il est défini pour la carte, parce qu'elle est définie pour tous les conteneurs associatifs, mais c'est beaucoup plus intéressant pour multimap.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X