IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Tri particulier d'un std::list


Sujet :

C++

  1. #1
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Par défaut Tri particulier d'un std::list
    Bonjour,

    J'ai une std::list qui contient des elements std::pair<std::string, int>, comme le montre le code ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      std::list<std::pair<std::string, int> >alist;
      std::pair<std::string, int> mp0("cde", 2);
      std::pair<std::string, int> mp1("fgh", 1);
      std::pair<std::string, int> mp2("abc", 3);
      alist.push_back(mp0);
      alist.push_back(mp1);
      alist.push_back(mp2);
    Ce que je veux, c'est trier cette liste selon le deux element de la std::pair (donc le int). Si je fais alist.sort(), ca trie selon le premier element (c-a-d le std::string), ce que je ne veux pas.




    Ca c'est mon premier souci. Le deuxieme c'est que une fois que la liste soit triee, je me demande s'il y a un truc dans la STL pour ne retenir que les 5 premiers elements de cette derniere et virer de la liste tous les autres.




    Je vous remercie d'avance

  2. #2
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 869
    Par défaut
    Tu peux donner un pointeur sur fonction à la méthode sort de la std::list comme montré ici pour pouvoir faire le tri comme tu veux.

    Pour ce qui est de ne garder que les 5 premiers éléments, tu as la méthode erase (description ici) et je me demande si la méthode resize pourrait faire ça aussi... A tester !

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    en regardant la doc std::list, tu trouveras la fonction sort.
    Cette fonction peut prendre en paramètre un comparateur, une structure qui surcharge l'opérateur () prenant en paramètre 2 const& éléments du type que contient ta liste, et retourne true si le premier est inférieur au 2° (doit être placé avant dans la liste), false sinon.

    Pour récupérer les 5 premiers éléments, plusieurs options
    - une nouvelle liste, copie des 5 éléments ? list::assign
    - garder uniquement les 5 premiers ? list::resize
    entre autre
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre averti
    Homme Profil pro
    Analyse système
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Par défaut
    Merci tout plein, je vais regarder tout ca et je posterai ici ma solution.
    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ListView] tri particulier (comparaison numérique)
    Par Cybher dans le forum C++Builder
    Réponses: 16
    Dernier message: 28/07/2005, 14h12
  2. [dev-C++]std::list<tree_node<T>*> iterator;
    Par jmv dans le forum Dev-C++
    Réponses: 7
    Dernier message: 06/05/2005, 13h14
  3. acceder au n iéme element d'une liste std::list
    Par sorari dans le forum SL & STL
    Réponses: 4
    Dernier message: 23/03/2005, 15h21
  4. [std::list][find_if] problème avec mes foncteurs
    Par n!co dans le forum SL & STL
    Réponses: 12
    Dernier message: 04/02/2005, 11h56
  5. [LG]Tri par insertion dans une liste chainée
    Par mister_dsg dans le forum Langage
    Réponses: 4
    Dernier message: 18/12/2003, 22h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo