
FAQ C++Consultez toutes les FAQ
Nombre d'auteurs : 34, nombre de questions : 368, derni�re mise � jour : 14 novembre 2021 Ajouter une question
Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur les forums de http://www.developpez.com et de l'exp�rience personnelle des auteurs.
Je tiens � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur ou si vous souhaitez devenir r�dacteur, lisez ceci.
Sur ce, nous vous souhaitons une bonne lecture.
Tout cela est expliqu� dans le tutoriel de r0d : Les algorithmes de la STL.
La fonction std::sort de la biblioth�que standard n'est compatible qu'avec les it�rateurs � acc�s direct (ceux pour lesquels les op�rateurs + et - sont d�finis), c'est-�-dire les it�rateurs de std::vector, std::string, std::deque et les pointeurs bruts. En effet, l'acc�s direct est l'un des pr�requis de l'algorithme de tri.
Pour trier un conteneur de type std::list, il faut utiliser la fonction membre std::list::sort() :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 | std::list<int> mylist; mylist.sort(); // Ou alors, avec un foncteur : std::list<int> mylist; mylist.sort(MonFoncteur()); |
Pour les utilisateurs de Visual C++ 6, la STL de ce dernier ne d�finit pas la version prenant en param�tre un foncteur (� cause du manque de support des fonctions membres templates). Dans ce cas, une solution peut �tre de passer par un vecteur :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 | // Copie de la liste dans un nouveau vecteur std::vector v(mylist.begin(), mylist.end()); // Tri du vecteur std::sort(v.begin(), v.end(), MonFoncteur()); // Recopie du vecteur dans la liste originale mylist.clear(); std::copy(v.begin(), v.end(), std::back_inserter(mylist)); |
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #include <vector> #include <algorithm> #include <iostream> #include <string> #include <set> // D�finition de notre structure � trier struct A { A(int i, std::string s) : Number(i), String(s) {} int Number; std::string String; }; // Surcharge de l'op�rateur << pour afficher nos A std::ostream& operator <<(std::ostream& Stream, const A& a) { return Stream << a.Number << " " << a.String; } // D�finition du foncteur servant � trier nos objets selon le nombre struct SortByNumber { bool operator ()(const A& a1, const A& a2) const { return a1.Number < a2.Number; } }; // D�finition du foncteur servant � trier nos objets selon la cha�ne struct SortByString { bool operator ()(const A& a1, const A& a2) const { return a1.String < a2.String; } }; int main() { // Cr�ation d'un tableau de A std::vector<A> v; v.push_back(A(1, "salut")); v.push_back(A(5, "hello")); v.push_back(A(2, "buenos dias")); // Tri selon leur num�ro std::sort(v.begin(), v.end(), SortByNumber()); std::copy(v.begin(), v.end(), std::ostream_iterator<A>(std::cout, "\n")); std::cout << std::endl; // Tri selon leur cha�ne de caract�res std::sort(v.begin(), v.end(), SortByString()); std::copy(v.begin(), v.end(), std::ostream_iterator<A>(std::cout, "\n")); std::cout << std::endl; // On peut �galement personnaliser le comportement des conteneurs tri�s std::set<A, SortByString> s; s.insert(A(1, "salut")); s.insert(A(5, "hello")); s.insert(A(2, "buenos dias")); // Les �l�ments du conteneurs sont automatiquement tri�s selon leur cha�ne gr�ce � notre foncteur std::copy(s.begin(), s.end(), std::ostream_iterator<A>(std::cout, "\n")); return 0; } |
Proposer une nouvelle r�ponse sur la FAQ
Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �aLes sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.