Utilisation des set, multiset, map, multimap de la STL


Chaque application a besoin de gérer des données. La gestion des données de type liste est souvent problématique. Soit il faut développer ses propres fonctions, utiliser telle ou telle librairie ou bien tirer partie de la librairie standard du C++, la STL : Standard Template Library. La STL est au C++ ce que la C-RunTime est au C. Chaque compilateur redistribue la STL.

Observons deux types de listes: les ensembles (set, multiset) et les dictionnaires (map, multimap). Les multiX acceptent les doublons. Les set sont des listes simples d'élement X. Les map sont des dictionnaires. On associe un élement X à un élement Y.

Le parcours de ces listes se fait via des itérateurs. L'itérateur se positionne au début via la méthode begin(), à la fin via la méthode end() et le parcours des élements se fait par l'opérateur ++.
Voici un fichier texte contenant une liste d'ordinateurs avec des doublons:
ST0010;129.133.1.1
ST0010;129.133.1.2
ST0010;129.133.1.3
ST0011;129.163.1.1
ST0012;129.164.1.1
ST0013;129.165.1.1
ST0014;129.132.1.1
ST0015;129.166.1.1
...
L'insertion d'un élement dans une map se fait par un appel à la méthode insert() du type: 
map.insert(pair<string,string>(string1,string2));
L'insertion d'en élément dans un set est aussi réalisé par un appel à la méthode insert():
set.insert(string1);
Le parcours de la map se fait par un itérateur et les données de la map sont obtenues via les propriétés first et second de l'itérateur:
	//typedef multimap<string,string> CUSTOMMAP;
	typedef map<string,string> CUSTOMMAP;
	CUSTOMMAP::const_iterator itMap;
	for( itMap=mapCompAdr.begin() ; itMap!=mapCompAdr.end() ; itMap++ )
	{
		string strComputer = (*itMap).first;
		string strAdr = (*itMap).second;
		cout << strComputer << ", " << strAdr << endl;
	}
Si la map est remplacée dans le typedef par une multimap, alors les doublons seront autorisés. 
Le parcours d'un set est presque identique à celui d'une map:
	//typedef multiset<string> CUSTOMSET;
	typedef set<string> CUSTOMSET;
	CUSTOMSET::const_iterator itSet;
	for( itSet=setComputer.begin() ; itSet!=setComputer.end() ; itSet++ )
	{
		string strComputer = (*itSet);
		cout << strComputer << endl;
	}

© 2001 Christophe Pichaud. All rights reserved.