Conteneurs associatifs - multimap

Décembre 2016

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)

A voir également :

Ce document intitulé «  Conteneurs associatifs - multimap  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.