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?
Configuration: Linux
Firefox 3.5.7

2 réponses

  1. tu veut faire quel sorte de trie soit plus explicite sur ta fonction.
    0
    1. Modérateur
      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