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

Fermé
Utilisateur anonyme - 10 janv. 2010 à 14:44
mamiemando Messages postés 33665 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2025 - 10 janv. 2010 à 15:08
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?
A voir également:

2 réponses

smag42 Messages postés 200 Date d'inscription dimanche 15 février 2009 Statut Membre Dernière intervention 22 mai 2014 10
10 janv. 2010 à 15:06
tu veut faire quel sorte de trie soit plus explicite sur ta fonction.
0
mamiemando Messages postés 33665 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 14 mai 2025 7 850
10 janv. 2010 à 15:08
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