le fichier à include pour utiliser les ensembles#include <iostream> #include <set>
Pour une insertion dans un set il n'est pas nécessaire de préciser une position. L'élément se placera à sa place selon le critère de tri du set.using namespace std; int main() { // Création d'un ensemble de caractères set<char> sChar; // Ajouter des caractères sChar.insert( 'F' ); sChar.insert( 'C' ); sChar.insert( 'A' ); sChar.insert( 'D' );
Vous auriez pu normalement écrire cette boucle tout(e) seul(e)// Afficher les éléments du set for( set<char>::const_iterator i = sChar.begin(); i !=sChar.end(); ++i ) { cout << *i << ' ';
On ne saute la ligne qu'à la fin pour ne pas trop écrire On notera que l'affichage des éléments ( A C D F ) ne correspond pas à l'ordre d'insertion dans le set ( F C A D ). Ainsi le set reste trié dès qu'un nouvel élément y est ajouté.} cout << endl;
Le set permet de compter le nombre d'occurence d'un élément ici D = 1 et B = 0. Dans un set, le résultat attendu est soit 0 soit 1.// Comptage cout << "Nb de D : " << sChar.count( 'D' ) << endl; cout << "Nb de B : " << sChar.count( 'B' ) << endl;
La méthode find() permet donc de rechercher un caractère dans l'ensemble et renvoie un itérateur sur sa position dans le set. Il suffit de comparer cet itérateur avec l'itérateur de fin du set pour savoir si cet élément a été trouvé ou non.// Recherche cout << "F trouvé ? " << ( sChar.find( 'F' ) != sChar.end() ) << endl; cout << "B trouvé ? " << ( sChar.find( 'B' ) != sChar.end() ) << endl;
On ajoute un B, un F et un E au set. Le B et E n'existant pas il devrait être ajouté après le A et le D Le F existe déjà, il ne sera pas inséré car il n'y a pas de doublon dans un set.// Pour vérifier le tout sChar.insert( 'B' ); sChar.insert( 'F' ); sChar.insert( 'E' );
Comme prévu, l'affichage nous donne bien A B C D E F// Afficher les éléments du set après l'insertion for( set<char>::const_iterator j = sChar.begin(); j !=sChar.end(); ++j ) { cout << *j << ' '; } cout << endl;
}
Cette présentation du set nous à fait découvrir le premier conteneur gérant de manière complexe l'insertion d'un élément. Pour la première fois, nous disposons d'une méthode (et non pas d'un algorithme STL) afin de rechercher et de compter les élements. De plus, on le verra peut être plus tard, la STL dispose d'algorithme spécialement dédié pour la manipulation de ces conteneurs triés : includes, set_union, set_intersection, set_difference, ...
J'en ai parlé rapidement au début mais la critère par défaut est < (less) ce qui laisse sous entendre qu'on peut le changer Essayez de changer la ligne 22 de ce programme par set<char, greater<char> > sChar; La notation laisse entrevoir qu'au lieu d'avoir set<char, less<char> > sChar; donc less nous avons changé le tri par > (greater). Après la modification vous verrez le set est trié dans l'autre sens et que l'affichage final nous donne : F E D C B A
#include <iostream> #include <set> using namespace std; int main() { // Création d'un ensemble de caractères set<char> sChar; // Ajouter des caractères sChar.insert( 'F' ); sChar.insert( 'C' ); sChar.insert( 'A' ); sChar.insert( 'D' ); // Afficher les éléments du set for( set<char>::const_iterator i = sChar.begin(); i !=sChar.end(); ++i ) { cout << *i << ' '; } cout << endl; // Comptage cout << "Nb de D : " << sChar.count( 'D' ) << endl; cout << "Nb de B : " << sChar.count( 'B' ) << endl; // Recherche cout << "F trouvé ? " << ( sChar.find( 'F' ) != sChar.end() ) << endl; cout << "B trouvé ? " << ( sChar.find( 'B' ) != sChar.end() ) << endl; // Pour vérifier le tout sChar.insert( 'B' ); sChar.insert( 'F' ); sChar.insert( 'E' ); // Afficher les éléments du set après l'insertion for( set<char>::const_iterator j = sChar.begin(); j !=sChar.end(); ++j ) { cout << *j << ' '; } cout << endl; }
00001 #include <iostream> 00002 #include <set> 00003 using namespace std; 00004 00005 int main() 00006 { 00007 // Création d'un ensemble de caractères 00008 set<char> sChar; 00009 00010 // Ajouter des caractères 00011 sChar.insert( 'F' ); 00012 sChar.insert( 'C' ); 00013 sChar.insert( 'A' ); 00014 sChar.insert( 'D' ); 00015 // Afficher les éléments du set 00016 for( set<char>::const_iterator i = sChar.begin(); i !=sChar.end(); ++i ) 00017 { 00018 cout << *i << ' '; 00019 } 00020 cout << endl; 00021 // Comptage 00022 cout << "Nb de D : " << sChar.count( 'D' ) << endl; 00023 cout << "Nb de B : " << sChar.count( 'B' ) << endl; 00024 // Recherche 00025 cout << "F trouvé ? " << ( sChar.find( 'F' ) != sChar.end() ) << endl; 00026 cout << "B trouvé ? " << ( sChar.find( 'B' ) != sChar.end() ) << endl; 00027 // Pour vérifier le tout 00028 sChar.insert( 'B' ); 00029 sChar.insert( 'F' ); 00030 sChar.insert( 'E' ); 00031 // Afficher les éléments du set après l'insertion 00032 for( set<char>::const_iterator j = sChar.begin(); j !=sChar.end(); ++j ) 00033 { 00034 cout << *j << ' '; 00035 } 00036 cout << endl; 00037 }