Comment interpréter une carte en C++

Jinku Hu 12 octobre 2023
  1. Utilisation de la boucle while pour itérer sur les éléments std::map
  2. Utilisation de la boucle traditionnelle for pour itérer les éléments std::map
  3. Utilisation de la boucle for à portée pour itération sur les éléments std::map
  4. Utilisation de la boucle for basée sur la portée pour itérer les paires clé-valeur std::map
Comment interpréter une carte en C++

Cet article explique comment itérer sur une map en C++ en utilisant plusieurs méthodes.

Utilisation de la boucle while pour itérer sur les éléments std::map

Tout d’abord, nous définissons une structure de carte temporaire “tempMap” et la remplissons avec des paires de clés/valeurs arbitraires, que nous produirons à stdout pour mieux démontrer les solutions proposées.

#include <iostream>
#include <map>

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

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  auto iter = tempMap.begin();
  while (iter != tempMap.end()) {
    cout << "[" << iter->first << "," << iter->second << "]\n";
    ++iter;
  }
  cout << endl;
  return 0;
}

Production:

[ 1, Apple ][2, Banana][3, Mango][4, Raspberry][5, Blackberry][6, Cocoa]

Notez que nous utilisons le spécificateur de type auto pour déclarer l’itérateur std::map car cette méthode est recommandée pour la lisibilité. Il s’agit de map<int, string>::iterator, qui peut être spécifié explicitement.

Utilisation de la boucle traditionnelle for pour itérer les éléments std::map

Maintenant, mettons en place la même boucle avec l’itération for traditionnelle, qui est sans doute la plus mauvaise en matière de lisibilité.

#include <iostream>
#include <map>

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

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  for (auto iter = tempMap.begin(); iter != tempMap.end(); ++iter) {
    cout << "[" << iter->first << "," << iter->second << "]\n";
  }
  cout << endl;
  return 0;
}

Utilisation de la boucle for à portée pour itération sur les éléments std::map

Les boucles basées sur la portée sont le choix commun des programmeurs C++ depuis un certain temps. Si votre compilateur supporte la version C++11, alors vous ne devriez plus penser aux boucles traditionnelles encombrantes et apprécier l’élégance de l’exemple suivant:

#include <iostream>
#include <map>

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

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  for (const auto &item : tempMap) {
    cout << "[" << item.first << "," << item.second << "]\n";
  }
  cout << endl;
  return 0;
}

Utilisation de la boucle for basée sur la portée pour itérer les paires clé-valeur std::map

Cette version a été définie depuis la norme C++17 pour offrir une itération plus souple dans les conteneurs associatifs. Le principal avantage de cette méthode par rapport aux exemples précédents est l’accès pratique aux valeurs clés dans la structure map, ce qui assure également une meilleure lisibilité pour un programmeur.

#include <iostream>
#include <map>

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

int main() {
  map<int, string> tempMap = {{
                                  1,
                                  "Apple",
                              },
                              {
                                  2,
                                  "Banana",
                              },
                              {
                                  3,
                                  "Mango",
                              },
                              {
                                  4,
                                  "Raspberry",
                              },
                              {
                                  5,
                                  "Blackberry",
                              },
                              {
                                  6,
                                  "Cocoa",
                              }};

  for (const auto& [key, value] : tempMap) {
    cout << "[" << key << "," << value << "]\n";
  }
  cout << endl;
  return 0;
}
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