Conteneurs associatifs - multimap
multimap
Un multimap est analogue à un map sauf que ses éléments peuvent posséder des clés dupliquées. La définition de la classe multimap est donc similaire à celle de la classe conteneur map, à quelques exceptions près. Elle ne fournit pas l’opérateur index [] puisque plusieurs éléments peuvent posséder la même valeur de clé. L’opération d’insertion réussit toujours, les clés dupliquées étant autorisées. Pour utiliser un conteneur map, vous devez inclure le fichier en-tête <map> au début du programme et travailler dans l’espace de noms std.Code 8.14 : utilisation de la classe multimap
#include <iostream> #include <string> #include <map> using namespace std; template<class Cle, class T> void AfficherMultimap(const multimap<Cle, T>& m); template<class Cle, class T> void AfficherMultimapRange(const multimap<Cle, T>& m, const Cle& k); int main() { //On crée un multimap multimap<string, string> MonMultimap; //On y stocke des éléments MonMultimap.insert(make_pair((string)"cle_1", (string)"Elément 1")); MonMultimap.insert(make_pair((string)"cle_1", (string)"Elément 2")); MonMultimap.insert(make_pair((string)"cle_1", (string)"Elément 3")); MonMultimap.insert(make_pair((string)"cle_2", (string)"Elément 4")); MonMultimap.insert(make_pair((string)"cle_3", (string)"Elément 5")); cout << "Voici le contenu de notre multimap:\n"; AfficherMultimap(MonMultimap); cout << "Voici les éléments de valeur de"; cout << " clé \"cle_1\":\n"; AfficherMultimapRange(MonMultimap, (string)"cle_1"); } template<class Cle, class T> void AfficherMultimap(const multimap<Cle, T>& m) { typedef typename multimap<Cle, T>::const_iterator Itor; for (Itor i = m.begin(); i != m.end(); ++i) cout << i->first << "\t" << i->second << "\n"; cout << "\n"; } template<class Cle, class T> void AfficherMultimapRange(const multimap<Cle, T>& m, const Cle& k) { typedef typename multimap<Cle, T>::const_iterator Itor; pair<Itor, Itor> p = m.equal_range(k); for (Itor i = p.first; i != p.second; ++i) cout << i->first << "\t" << i->second << "\n"; cout << "\n"; }
Voici le résultat de l’exécution de ce code :
Voici le contenu de notre multimap: cle_1 Elément 1 cle_1 Elément 2 cle_1 Elément 3 cle_2 Elément 4 cle_3 Elément 5 Voici les éléments de valeur de clé "cle_1": cle_1 Elément 1 cle_1 Elément 2 cle_1 Elément 3
Notez que la fonction AfficherMultimapRange() utilise equal_range() pour obtenir le premier et le dernier élément possédant la même valeur de clé.
Le texte original de cette fiche pratique est extrait de
«Tout sur le C++» (Christine EBERHARDT, Collection
CommentCaMarche.net, Dunod, 2009)