Tri en fonction d'un paramétre en c++

Utilisateur anonyme -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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?
Configuration: Linux
Firefox 3.5.7

2 réponses

  1. smag42 Messages postés 208 Statut Membre 10
     
    tu veut faire quel sorte de trie soit plus explicite sur ta fonction.
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
    0