Utiliser un conteneur de carte STL en C++

Jinku Hu 12 octobre 2023
  1. Utilisez std::map pour déclarer un objet conteneur de carte en C++
  2. Utilisez la fonction membre find pour rechercher un élément spécifique dans une carte en C++
  3. Utilisez la fonction membre insert pour stocker un élément dans une carte en C++
  4. Utilisez la fonction membre merge pour joindre les éléments de deux objets cartographiques en C++
Utiliser un conteneur de carte STL en C++

Ce guide vous montrera plusieurs méthodes d’utilisation du conteneur de cartes STL en C++.

Utilisez std::map pour déclarer un objet conteneur de carte en C++

Le conteneur std::map implémente une structure de données de paire clé-valeur triée, où les clés sont uniques. Les valeurs clés trient les éléments de paire par ordre croissant par défaut ; cependant, l’utilisateur peut éventuellement passer une fonction de comparaison au modèle std::map. Vous pouvez initialiser l’objet map avec une liste de valeurs où chaque élément est spécifié dans des accolades séparées. Dans ce cas, nous créons une carte de paires string et en imprimons ensuite des éléments dans le flux cout. Notez que chaque élément est accessible en tant que membres std::pair dans la boucle for.

#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  printMap(m1);

  return EXIT_SUCCESS;
}

Production:

11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;

Utilisez la fonction membre find pour rechercher un élément spécifique dans une carte en C++

La fonction membre find est utile pour rechercher une paire clé-valeur spécifique dans le conteneur map. L’opération de recherche a une complexité logarithmique. La fonction find prend la référence à une clé et renvoie l’itérateur à l’élément avec la clé équivalente. Lorsqu’aucun élément n’est trouvé avec la clé donnée, un itérateur au-delà de la fin est renvoyé.

L’extrait de code suivant montre comment initialiser un nouveau conteneur map avec les itérateurs de plage. Notez que le premier itérateur est récupéré à l’aide de la fonction find. En outre, il peut être utile de vérifier la validité de l’itérateur renvoyé.

#include <cassert>
#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  std::map<string, string> m2(m1.find("11700K"), m1.end());
  printMap(m2);

  auto ret = m1.find("11700K");
  assert(ret != m1.end());
  std::map<string, string> m3(ret, m1.end());
  printMap(m3);

  return EXIT_SUCCESS;
}

Production:

11700K : Core i7;
11900K : Core i9;
1390P : Xeon W;

Utilisez la fonction membre insert pour stocker un élément dans une carte en C++

Vous pouvez ajouter de nouveaux éléments au conteneur map existant en utilisant la fonction membre insert. Le membre insert prend la référence à l’objet à ajouter et renvoie un conteneur std::pair composé d’un itérateur vers l’élément inséré et d’une valeur bool indiquant le statut d’insertion réussie. Lorsque l’insertion échoue, l’itérateur pointe sur l’élément qui a empêché l’opération.

#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  auto ret1 = m1.insert({"1390P", "Xeon W"});
  if (!ret1.second) {
    cout << "Not inserted!" << endl;
  }

  ret1 = m1.insert({"1390", "Xeon W"});
  if (!ret1.second) {
    cout << "Not inserted!" << endl;
  }
  printMap(m1);

  return EXIT_SUCCESS;
}

Production:

Not inserted !11600K : Core i5;
11700K : Core i7;
11900K : Core i9;
1390 : Xeon W;
1390P : Xeon W;

Utilisez la fonction membre merge pour joindre les éléments de deux objets cartographiques en C++

La fonction membre merge peut être utilisée pour joindre les éléments de deux conteneurs de carte. Il est appelé depuis l’objet map qui doit stocker les éléments combinés et prend une autre map comme argument. Après l’opération, tous les pointeurs et références aux éléments transférés sont valides.

#include <iostream>
#include <map>

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

template <typename Map>
void printMap(Map& m) {
  for (auto& p : m) cout << p.first << " : " << p.second << ";" << endl;
  cout << endl;
}

int main() {
  std::map<string, string> m1 = {
      {"11900K", "Core i9"},
      {"11700K", "Core i7"},
      {"11600K", "Core i5"},
      {"1390P", "Xeon W"},
  };

  std::map<string, string> m4 = {
      {"11900KF", "Core i9"}, {"11600T", "Core i5"}, {"11700K", "Core i7"}};

  m1.merge(m4);
  printMap(m1);

  return EXIT_SUCCESS;
}

Production:

11600K : Core i5;
11600T : Core i5;
11700K : Core i7;
11900K : Core i9;
11900KF : Core i9;
1390P : Xeon W;
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