Utilisez la fonction std::map::find en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction std::map::find pour rechercher l’élément avec une valeur de clé donnée en C++
  2. Utilisez la fonction membre contains pour vérifier si l’élément donné existe dans une carte en C++
Utilisez la fonction std::map::find en C++

Cet article explique comment utiliser la fonction std::map::find et certaines de ses alternatives en C++.

Utilisez la fonction std::map::find pour rechercher l’élément avec une valeur de clé donnée en C++

L’objet std::map est l’un des conteneurs associatifs de la bibliothèque de modèles standard C++, et il implémente une structure de données triée, stockant les valeurs clés. Notez que les clés sont uniques dans le conteneur std::map. Ainsi, si de nouveaux éléments sont insérés avec les clés existantes, l’opération n’a aucun effet. Néanmoins, certaines fonctions membres spéciales de la classe std::map peuvent affecter de nouvelles valeurs aux paires existantes si les clés correspondent (par exemple, la fonction insert_or_assign).

Les avantages du conteneur std::map incluent des opérations de recherche, d’insertion et de suppression rapides, qui peuvent être effectuées en temps logarithmique. L’opération de recherche est assurée par le membre find, qui accepte une référence à une clé. Si la clé donnée est trouvée dans l’objet std::map, l’itérateur de l’élément correspondant est renvoyé. D’un autre côté, supposons que la clé donnée ne soit pas trouvée dans le conteneur, l’itérateur passé à la fin (map::end()) est renvoyé.

L’extrait de code suivant illustre un scénario d’utilisation simple dans lequel un conteneur map de paires string est initialisé avec des valeurs arbitraires, puis la clé avec la valeur "h" est recherchée. Par conséquent, nous traitons l’itérateur renvoyé avec l’instruction if-else pour imprimer la paire d’éléments ou afficher un message indiquant que la clé donnée n’a pas été trouvée.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  auto item = m1.find(key);
  if (item != m1.end()) {
    cout << "Key exists!  -  {" << item->first << ";" << item->second << "}\n";
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Production:

Key exists !-{
  h;
  htop
}

Utilisez la fonction membre contains pour vérifier si l’élément donné existe dans une carte en C++

Si l’utilisateur a besoin de confirmer si la paire avec la valeur donnée existe dans l’objet map, on peut utiliser la fonction membre contains. La fonction fait partie du conteneur std::map depuis la version C++20, vous devez donc connaître la version du compilateur pour exécuter l’extrait de code suivant. La fonction contains prend une référence à la clé et renvoie la valeur bool true si elle est trouvée. La complexité temporelle de cette fonction membre est également logarithmique.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.contains(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Production:

Key Exists !

Alternativement, on peut utiliser la fonction membre cout pour vérifier si la paire d’éléments avec la clé donnée existe dans la map. Généralement, la fonction cout est utilisée pour récupérer le nombre d’éléments avec la clé donnée, mais comme le std::map ne stocke que des valeurs de clé uniques, le processus renvoie 1 si l’élément est trouvé. Sinon, une valeur zéro est renvoyée pour indiquer qu’aucun élément n’a été trouvé.

#include <iostream>
#include <map>

using std::cin;
using std::cout;
using std::endl;
using std::map;
using std::string;

int main() {
  std::map<string, string> m1 = {
      {"h", "htop"}, {"k", "ktop"}, {"t", "ttop"},
      {"r", "rtop"}, {"w", "wtop"}, {"p", "ptop"},
  };

  string key = "h";

  if (m1.count(key)) {
    cout << "Key Exists!" << endl;
  } else {
    cout << "Key does not exist!" << endl;
  }

  return EXIT_SUCCESS;
}

Production:

Key Exists !
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Map