Comment interpréter une carte en C++
-
Utilisation de la boucle
while
pour itérer sur les élémentsstd::map
-
Utilisation de la boucle traditionnelle
for
pour itérer les élémentsstd::map
-
Utilisation de la boucle
for
à portée pour itération sur les élémentsstd::map
-
Utilisation de la boucle
for
basée sur la portée pour itérer les paires clé-valeurstd::map
![Comment interpréter une carte en C++](/img/Cpp/feature-image---How-to-iterate-over-map-in-Cpp.webp)
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;
}
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