Classes de conteneurs C++<map>
En C++,<map>Elle fait partie de la Standard Template Library (STL), fournissant un conteneur associatif pour stocker des paires clé-valeur.
mapLes éléments du conteneur sont automatiquement triés selon l'ordre des clés, ce qui le rend très adapté aux scénarios nécessitant une recherche rapide et des données ordonnées.
Définition et caractéristiques
- Paires clé-valeur:
mapIl stocke des paires clé-valeur, où chaque clé est unique. - Tri:
mapLes éléments qu'il contient sont automatiquement triés selon l'ordre des clés, généralement par ordre croissant. - Unicité: chaque clé dans
mapne peut apparaître qu'une seule fois. - Itérateur bidirectionnel:
mapIl fournit des itérateurs bidirectionnels, permettant de parcourir les éléments vers l'avant et vers l'arrière.
Syntaxe de base
Inclure le fichier d'en-tête :
#include <map>
Déclarer le conteneur map :
std::map<key_type, value_type> myMap;
key_typeest le type de la clé.value_typeest le type de la valeur.
Insérer des éléments :
myMap[key] = value;
Accéder aux éléments :
value = myMap[key];
Parcourir map :
for (std::map<key_type, value_type>::iterator it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << it->first << " => " << it->second << std::endl;
}
Dans les normes C++11 et ultérieures, la partie de parcours peut être simplifiée en une boucle for basée sur une plage, ce qui rend le code plus concis :
for (auto &p : m) {
std::cout << p.first << " : " << p.second << std::endl;
}
Exemple
Ce qui suit est un exemple utilisantmapun exemple simple, nous allons créer unmappour stocker les noms des employés et leurs âges, et parcourir celui-cimappour afficher le nom et l'âge de chaque employé.
Exemple
#include <string>
int main() {
// Créer un conteneur map pour stocker les noms et les âges des employés
std::map<std::string, int> employees;
// Insérer les informations des employés
employees["Alice"] = 30;
employees["Bob"] = 25;
employees["Charlie"] = 35;
// Parcourir la map et afficher les informations des employés
for (std::map<std::string, int>::iterator it = employees.begin(); it != employees.end(); ++it) {
std::cout << it->first << " a " << it->second << " ans." << std::endl;
}
return 0;
}
Sortie :
Alice is 30 years old. Bob is 25 years old. Charlie is 35 years old.
Utilisation avancée
Vérifier si une clé existe :
if (myMap.find(key) != myMap.end()) {
// 键存在
}
Supprimer des éléments :
myMap.erase(key);
Vider la map :
myMap.clear();
Obtenir la taille de la map :
size_t size = myMap.size();
Autres méthodes :
myMap.empty(); // 是否为空
myMap.count("Bob"); // key 是否存在(返回 0 ou 1)
Pour un tri personnalisé, l'ordre par défaut est croissant ; vous pouvez utiliser std::greater ou une fonction de comparaison personnalisée :
std::map<int, std::string, std::greater<int>> m; // 降序
Utiliser une fonction de comparaison personnalisée :
Exemple
#include <string>
#include <functional>
bool myCompare(const std::string& a, const std::string& b) {
return a < b;
}
int main() {
std::map<std::string, int, std::function<bool(const std::string&, const std::string&)>> myMap(myCompare);
// Autres opérations...
return 0;
}
map est un conteneur très utile dans la STL C++, particulièrement adapté aux scénarios qui nécessitent une recherche rapide et des données ordonnées.
Exemple
#include <map>
#include <string>
int main() {
std::map<std::string, int> scores;
// Insertion
scores["Alice"] = 90;
scores["Bob"] = 85;
scores.insert({"Charlie", 92});
// Parcourir
for (auto &p : scores) {
std::cout << p.first << " => " << p.second << std::endl;
}
// Trouver
auto it = scores.find("Bob");
if (it != scores.end()) {
std::cout << "Score de Bob : " << it->second << std::endl;
}
// Supprimer
scores.erase("Alice");
std::cout << "Taille : " << scores.size() << std::endl;
return 0;
}
Résultat de l'exécution (trié automatiquement par clé) :
Alice => 90 Bob => 85 Charlie => 92 Bob's score: 85 Size: 2autres extensions