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 :

std::stable_sort et std::list


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut std::stable_sort et std::list
    Bonjour tout le monde,

    J'ai une liste de pointeur (std::list<A*>) que j'aimerai trier avec std::stable_sort et un comparateur spécifique.
    Lorsque je tente de compiler, j'obtiens des erreurs du style: /usr/include/c++/4.2.1/bits/stl_algo.h:3340: error: no match for ‘operator-’ in ‘__last - __first’

    J'ai vu dans ce fichier qu'il y a bien l'utilisation d'un 'moins' entre les deux itérateurs de la liste au niveau de la fonction std::__inplace_stable_sort.

    Est-ce que l'on peut utiliser les std::list avec les algos de tris?
    Faut il définir un operateur 'moins' au niveau des itérateurs?

    Pour info, j'ai remplacé std::list par std::vector et je n'ai plus de problème de compilation.

    Merci d'avance.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Ce lien te donneras la réponse à ta question :
    http://bakura.developpez.com/tutoriel/cpp/tri/

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Super!

    Merci beaucoup pour ta réponse!

    Vu que je dois utiliser std::stable_sort, je vais utiliser std::vector à la place.

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Ce n'est pas obligatoire.
    La fonction membre std::list::sort() est stable par défaut.

    Cf paragraphe 23.3.5.6/28/29/30 du standard :
    void sort();
    Effects: Sorts the list according to the operator< or a Compare function object. Does not affect the validity of iterators and references.
    Remarks: Stable.
    Après std::vector est souvent un bon choix par défaut. std::list n'est vraiment conseillé que dans les cas précis où l'on a vraiment besoin d'avoir la garanti sur la validité des itérateurs ou alors si l'on doit insérer/supprimer fréquemment au milieu de la liste)

    Edit : Aussi, attention à bien fournir un comparateur correct à std::sort, car si le conteneur contient des A* par défaut std::sort va comparer en utilisant < sur les pointeurs.

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

Discussions similaires

  1. Manipulations de vector, std::sort et std::unique
    Par dhoorens dans le forum C++
    Réponses: 4
    Dernier message: 16/11/2007, 09h41
  2. Équivalent de std::min et std::max en C?
    Par vdumont dans le forum C
    Réponses: 2
    Dernier message: 08/10/2006, 18h15
  3. conversion std::string en std::istringstream
    Par flipper203 dans le forum SL & STL
    Réponses: 3
    Dernier message: 06/07/2006, 18h34
  4. std::cout et std::wstring
    Par glKabuto dans le forum SL & STL
    Réponses: 11
    Dernier message: 10/06/2006, 18h44
  5. std::sort() sur std::vector()
    Par tut dans le forum SL & STL
    Réponses: 20
    Dernier message: 05/01/2005, 19h15

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