std::map
Stockage ordonné de paires clé-valeur
std::map est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que std::map ?
std::map stocke des paires clé-valeur triées par clé. Chaque clé est unique, et les recherches, insertions et suppressions s'effectuent en temps logarithmique.
- Les clés sont conservées dans un ordre trié.
- La structure repose sur un arbre binaire de recherche équilibré.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> ages;
ages["Alice"] = 30;
ages["Bob"] = 25;
std::cout << "Alice is " << ages["Alice"] << '\n';
return 0;
}Insérer des éléments
Vous pouvez insérer des éléments avec operator[], insert() ou emplace(). Utiliser [] avec une clé absente la crée avec une valeur par défaut.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m;
m["one"] = 1;
m.insert({"two", 2});
m.emplace("three", 3);
std::cout << m.size() << " entries\n";
return 0;
}Parcours dans l'ordre trié
Parcourir un std::map visite les clés dans l'ordre croissant. Chaque élément est un std::pair dont .first contient la clé et .second la valeur.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"banana", 3}, {"apple", 5}, {"cherry", 1}};
for (const auto& p : m) {
std::cout << p.first << " = " << p.second << '\n';
}
return 0;
}Rechercher des clés
Utilisez find() pour rechercher une clé en toute sécurité. La fonction renvoie un itérateur vers l'élément, ou end() si la clé est introuvable.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"x", 10}, {"y", 20}};
auto it = m.find("y");
if (it != m.end()) {
std::cout << "Found y = " << it->second << '\n';
} else {
std::cout << "Not found\n";
}
return 0;
}Vérifier l'existence
Pour vérifier qu'une clé existe sans la créer, utilisez count() (qui renvoie 0 ou 1) ou contains() en C++20.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}};
std::cout << m.count("a") << '\n';
std::cout << m.count("z") << '\n';
return 0;
}Mettre à jour les valeurs
Réaffecter une clé met à jour sa valeur sur place. La structure map ne conserve qu'une seule valeur par clé.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> score;
score["player"] = 10;
score["player"] += 5;
std::cout << score["player"] << '\n';
return 0;
}Supprimer des éléments
erase() supprime un élément par sa clé ou par son itérateur. Avec une clé, la fonction renvoie le nombre d'éléments supprimés.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
m.erase("b");
std::cout << m.size() << " left\n";
for (const auto& p : m) std::cout << p.first << ' ';
std::cout << '\n';
return 0;
}Utiliser at()
at() renvoie une référence vers la valeur associée à une clé et lève std::out_of_range si la clé est absente. Contrairement à [], cette fonction n'insère jamais d'élément.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"k", 42}};
std::cout << m.at("k") << '\n';
std::cout << "size: " << m.size() << '\n';
return 0;
}Compter la fréquence des mots
Une utilisation classique de std::map consiste à compter des occurrences. L'opérateur [] initialise par défaut les nouvelles clés à 0, donc ++ fonctionne directement.
#include <iostream>
#include <map>
#include <string>
int main() {
std::string words[] = {"cat", "dog", "cat", "bird", "dog", "cat"};
std::map<std::string, int> freq;
for (const auto& w : words) freq[w]++;
for (const auto& p : freq) std::cout << p.first << ": " << p.second << '\n';
return 0;
}Liaisons structurées
C++17 permet de décomposer chaque paire au moyen de liaisons structurées, en donnant des noms lisibles à la clé et à la valeur.
#include <iostream>
#include <map>
int main() {
std::map<std::string, int> m{{"red", 1}, {"green", 2}};
for (const auto& [name, value] : m) {
std::cout << name << " -> " << value << '\n';
}
return 0;
}Vérifier si la structure est vide
empty() indique si la structure map ne contient aucun élément, et clear() supprime tout en une seule fois.
#include <iostream>
#include <map>
int main() {
std::map<int, int> m{{1, 1}, {2, 4}};
std::cout << std::boolalpha << m.empty() << '\n';
m.clear();
std::cout << m.empty() << '\n';
return 0;
}Vérification rapide
Vérifiez votre compréhension de l'ordre de std::map.
Récapitulatif
Vous avez appris que std::map :
- stocke des clés uniques et triées associées à des valeurs
- prend en charge
insert,[],find,count,ateterase - parcourt les éléments dans l'ordre croissant des clés, sous forme de paires que vous pouvez décomposer avec les liaisons structurées
Ensuite, vous découvrirez std::set, qui permet de stocker uniquement des valeurs uniques et triées.
Questions Fréquemment Posées
La leçon « std::map » est-elle gratuite ?
Oui — le texte complet de « std::map » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « std::map » ?
Stockage ordonné de paires clé-valeur Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « std::map » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.