multimap et multiset
Autoriser les clés en double
multimap et multiset est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Autoriser les doublons
std::multimap et std::multiset ressemblent à map et set, mais ils autorisent les clés en double. Tout reste trié.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 3, 3};
for (int x : ms) std::cout << x << ' ';
std::cout << '\n';
return 0;
}Insertion dans multiset
Chaque appel à insert() sur un multiset réussit, même pour des valeurs répétées, et le conteneur grandit à chaque fois.
#include <iostream>
#include <set>
int main() {
std::multiset<std::string> ms;
ms.insert("a");
ms.insert("a");
ms.insert("a");
std::cout << ms.size() << " elements\n";
return 0;
}Compter les doublons
count() renvoie désormais le nombre d’occurrences d’une valeur, qui peut être supérieur à 1.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{5, 5, 5, 7, 9, 9};
std::cout << "5 appears " << ms.count(5) << " times\n";
std::cout << "9 appears " << ms.count(9) << " times\n";
return 0;
}Tout effacer ou en effacer un seul
erase(key) supprime tous les éléments correspondants. Pour n’en supprimer qu’un, effacez un seul itérateur obtenu avec find().
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 2, 3};
ms.erase(ms.find(2));
std::cout << "count of 2: " << ms.count(2) << '\n';
return 0;
}Principes de base de multimap
std::multimap associe des clés à des valeurs, mais permet à une même clé d’être associée à plusieurs valeurs. Remarque : il ne possède pas d’operator[].
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm;
mm.insert({"fruit", 1});
mm.insert({"fruit", 2});
mm.insert({"veg", 3});
std::cout << mm.size() << " pairs\n";
return 0;
}Parcourir un multimap
Le parcours fournit toutes les paires dans l’ordre trié des clés, y compris les clés répétées.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"a", 1}, {"a", 2}, {"b", 3}};
for (const auto& [k, v] : mm) {
std::cout << k << " => " << v << '\n';
}
return 0;
}equal_range
equal_range(key) renvoie une paire d’itérateurs délimitant tous les éléments associés à cette clé. C’est la méthode standard pour lire toutes les valeurs d’une clé.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, int> mm{{"x", 10}, {"x", 20}, {"y", 30}};
auto range = mm.equal_range("x");
for (auto it = range.first; it != range.second; ++it) {
std::cout << it->second << ' ';
}
std::cout << '\n';
return 0;
}Regrouper des données
Un multimap est idéal pour regrouper des données : plusieurs personnes peuvent, par exemple, habiter dans la même ville.
#include <iostream>
#include <map>
int main() {
std::multimap<std::string, std::string> byCity{
{"NYC", "Alice"}, {"NYC", "Bob"}, {"LA", "Carol"}
};
auto r = byCity.equal_range("NYC");
for (auto it = r.first; it != r.second; ++it)
std::cout << it->second << '\n';
return 0;
}lower_bound sur multiset
Les recherches dans des intervalles ordonnés fonctionnent toujours. lower_bound trouve le premier élément qui n’est pas inférieur à la valeur cible.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 2, 2, 3, 4};
auto it = ms.lower_bound(2);
std::cout << "first >= 2 is " << *it << '\n';
return 0;
}Liste de fréquences triée
Comme les éléments restent triés, un multiset produit naturellement une sortie ordonnée tout en conservant les répétitions.
#include <iostream>
#include <set>
int main() {
std::multiset<int> scores{90, 75, 90, 60, 75, 90};
for (int s : scores) std::cout << s << ' ';
std::cout << '\n';
return 0;
}Total et valeurs distinctes
size() compte chaque élément, y compris les doublons, tandis que pour parcourir les clés distinctes, vous devez vous-même ignorer les répétitions.
#include <iostream>
#include <set>
int main() {
std::multiset<int> ms{1, 1, 2, 3, 3};
std::cout << "total: " << ms.size() << '\n';
std::cout << "count of 1: " << ms.count(1) << '\n';
return 0;
}Vérification rapide
Vérifiez votre compréhension de la suppression d’éléments dans un multiset.
Récapitulatif
Vous avez appris que multimap et multiset :
- autorisent les clés en double tout en restant triés
- utilisent
equal_rangepour lire toutes les valeurs partageant une même clé - font en sorte que
erase(key)supprime toutes les correspondances, tandis que la suppression d’un itérateur n’en supprime qu’une
Ensuite, vous contrôlerez l’ordre avec des comparateurs personnalisés.
Questions Fréquemment Posées
La leçon « multimap et multiset » est-elle gratuite ?
Oui — le texte complet de « multimap et multiset » 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 « multimap et multiset » ?
Autoriser les clés en double 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 3 sur 4.
Combien de temps prend la leçon « multimap et multiset » ?
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.
Toutes les leçons de ce cours
- std::map
- std::set
- multimap et multiset
- Comparateurs personnalisés