Les maps sont des conteneurs dits
associatifs (des sortes de tableaux dont l'indice n'est pas un entier,
mais un string par exemple).
Exemple:
#include <string>
#include <map>
#include <iostream>
using namespace std;
int main()
{
map<string, int> frequencyCount;
multimap<int, string> frequencyCount2;
string s;
// récupère ce que rentre l'utilisateur jusq'à ce qu'il tape "quit"
cin >> s;
while( s != "quit" ) {
frequencyCount[s]++;
cin >> s;
}
// écrit la fréquence de chaque mot
map<string, int>::const_iterator iter;
for( iter=frequencyCount.begin(); iter != frequencyCount.end(); ++iter) {
cout << iter->first << " " << iter->second << endl;
//on écrit d'abord le string (par ordre alphabétique) puis le nombre d'occurrences correspondant
frequencyCount2.insert(pair <int,string> (iter->second,iter->first));
}
// on insere la paire entier,string dans un multimap
// (car plusieurs strings peuvent avoir la même fréquence)
// et on parcourt le multimap à l'envers pour avoir les plus utilisés d'abord
multimap<int, string>::reverse_iterator iter2;
for( iter2=frequencyCount2.rbegin(); iter2 != frequencyCount2.rend(); ++iter2)
cout << iter2->first << " " << iter2->second << endl;
// cette fois-ci c'est l'inverse, d'abord le nombre d'occurrences (décroissant) puis le string
}
A noter qu'aussi bien map que multimap sont triés, ce qui est
bien pour le programme précédent, mais peut être
complètement inutile pour certaines utilisations. Dans ces
cas-là, il existe l'extension SGI (disponible avec g++) hash_map
qui implémente la notion de table de hachage. Malheureusement,
cette extension n'a pas été acceptée dans la
librairie C++ standard, apparemment parce que présentée
en retard au comité correspondant.