Pas de dépendances
#include <set> #include <iostream> using namespace std; int main() { set<int> s; s.insert(5); s.insert(15); s.insert(2); s.insert(8); s.insert(27); s.insert(6); s.insert(5); set<int>::iterator I; for(I=s.begin();I!=s.end();I++) cout << "element " << *I << endl; return 0; }
certaines ancienne versions de visual C++ pourront vous mettre un warning (4786), n'en tenez pas compte. Tres simple : set garde en mémoire une liste triée d'éléments. Contrairement a priority_queue qui n'est capable de vous donner QUE le premier élément, et vous obligé a dépiler pour consulter la liste, set garde en mémoire les éléments triés. Dès que vous en insérez un grace a la méthode insert, il se met tout de suite a la bonne place. Ainsi, vous pouvez parcourir le set grace a un itérateur comme vu dans l'exemple. Note : set garde des éléments uniques : si vous insérez "5" dedans, et que vous réinsérez un autre "5" ensuite (donc l'identique), le "5" n'apparaitra pas deux fois, mais qu'une seule. (c'est ce qu'il se passe : j'insere le 5 deux fois, et il n'apparait qu'une fois) pour mettre plusieurs fois le meme éléments dans un "set", il faut utiliser "multiset" : remplacez simplement "set" par "multiset" (et pareil dans la définition de l'itérateur) et vous verrez que le 5 apparait plusieurs fois. (* pour info : set utilise des classes d'arbre binaire de recherche pour une optimisation des données et de la vitesse) TRI PERSONNALISE **************** vous pouvez bien sur faire : set<truc, greater<truc> > ou set<truc, monfoncteur> * pensez a modifier également la déclaration de l'itérateur dans ces cas la... * Le tuto précédent sur les foncteurs explique cette partie.