map


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.

Drupal 7 Appliance - Powered by TurnKey Linux