Utiliser un conteneur de carte STL en C++
-
Utilisez
std::map
pour déclarer un objet conteneur de carte en C++ -
Utilisez la fonction membre
find
pour rechercher un élément spécifique dans une carte en C++ -
Utilisez la fonction membre
insert
pour stocker un élément dans une carte en C++ -
Utilisez la fonction membre
merge
pour joindre les éléments de deux objets cartographiques 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;
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