Tri en fonction d'un paramétre en c++
Bonjour,
j'aimerais trier et afficher en c++ une liste d'animaux en fonction du numéro d'animal. Mais je ne connais pas la syntaxe correspondante à cette fonction. Pouver vous m'aider?
j'aimerais trier et afficher en c++ une liste d'animaux en fonction du numéro d'animal. Mais je ne connais pas la syntaxe correspondante à cette fonction. Pouver vous m'aider?
Configuration: Linux Firefox 3.5.7
2 réponses
-
tu veut faire quel sorte de trie soit plus explicite sur ta fonction.
-
En admettant que tu aies stocké ton animal sous forme d'une structure ou d'une classe et que tu aies défini un opérateur < pour cette classe, tu peux utiliser le container STL std::set. Commence par lire ceci :
https://forums.commentcamarche.net/forum/affich-37604421-introduction-a-la-stl-en-c-standard-template-library
Voici ce que ça donne :
#include <iostream> #include <string> #include <set> class animal_t{ protected: std::string nom; int id; public: animal_t(){} animal_t(const std::string & nom0,int id0): nom(nom0), id(id0) {} inline int get_id() const{ return id; } inline const std::string & get_nom() const{ return nom; } }; // Cet opérateur sera utilisé par std::set pour trier les éléments inline bool operator < ( const animal_t & animal1, const animal_t & animal2 ){ return (animal1.get_id() < animal2.get_id()) || (animal1.get_id() == animal2.get_id() && animal1.get_nom() < animal2.get_nom()); } // Cet opérateur permet d'écrire un animal inline std::ostream & operator << ( std::ostream & out, const animal_t & animal ){ out << '[' << animal.get_id() << ',' << animal.get_nom() << ']'; return out; } int main(){ std::set<animal_t> animaux; animaux.insert(animal_t("chouette",4)); animaux.insert(animal_t("tapir",2)); animaux.insert(animal_t("pangolin",7)); // On parcourt le std::set pour afficher les éléments. // Ils sont écrits du plus petit au plus grand (au sens de l'opérateur <) // En réalité : std::set<T> équivaut à std::set<T,std::less<T> > (avec T = animal_t) // ... et std::less<T> repose sur l'opérateur < qui prend deux opérandes de type T { std::set<animal_t>::const_iterator sit (animaux.begin()), send(animaux.end()); for(;sit!=send;++sit){ const animal_t & animal_cur = *sit; std::cout << animal_cur << std::endl; } } }
À l'exécution on obtient :
[2,tapir] [4,chouette] [7,pangolin]
Bonne chance