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

SL & STL C++ Discussion :

trier une liste de pointeurs sur personne


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut trier une liste de pointeurs sur personne
    Bonjour,

    J'ai une liste de personne mais cette liste contient pas les objets eux mêmes mais des pointeurs sur ceux-ci :

    Et du coup j'ai un problème pour effectuer un tri parce qu'il faut définir l'opérateur < sur des types Personne* mais je n'arrive pas le définir, je ne sais pas ou le définir... ?

    J'avais déja fait l'opérateur < sur Personne mais bien sur ca ne fonctionnait pas parce que ce n'est pas une liste de Personne mais de Personne*

    Quelqu'un a une idée ??

    Merci

    ++

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Pour pouvoir trier ta liste, il existe une méthode sort () qui prend en argument un foncteur de comparaison.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    class Personne;
     
    struct infPersonne {
      bool operator () (const Personne *a, const Personne *b) {
        ...
      }
    };
     
    typedef list <Personne *> PList;
     
    int main () {
      PList pl;
      ...
      pl.sort (infPersonne());
      ...
    }

  3. #3
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Un foncteur c'est quoi ? une sorte de structure ?

    J'ai mis ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Personne
    {
    };
     
    struct infPersonne {
      bool operator () (const Personne *a, const Personne *b) {
        return ((*a).nom < (*b).nom);
      }
    };
    Et ca me dit que nom est un champ privé... ca ne compile pas !!

    Que faire ? un friend ? (ne veut pas non plus compiler...)

    Merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Puisque tu as déjà un opérateur <
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct infPersonne
    {
        bool operator () (const Personne *a, const Personne *b) const
        {
            return *a < *b;
        }
    };

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Citation Envoyé par italiasky Voir le message
    Un foncteur c'est quoi ?
    http://cpp.developpez.com/faq/cpp/?page=STL#STL_functor

    Et ca me dit que nom est un champ privé... ca ne compile pas !!
    Tu sais ce que veux dire privé ? Tu peux ajouter une méthode publique getNom().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct infPersonne {
      bool operator () (const Personne *a, const Personne *b) {
        return (a->getNom() < b->getNom());
      }
    };
    Remarque: (*a).nom s'écrit aussi a->nom (ça me paraît plus simple à lire)

    Si tu ne veux pas ajouter la méthode getNom (), tu peux surcharger l'opérateur < dans ta classe Personne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class Personne {
    public:
      ...
      bool operator < (const Personne & a) const  { ... }
      ...
    };
     
    struct infPersonne {
      bool operator () (const Personne *a, const Personne *b) {
        return *a < *b;
      }
    };

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Oui ok merci je suis parvenu à faire ce que je voulais.

    Merci

    ++

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/03/2014, 09h56
  2. Trier une liste de pointeur de class
    Par lolaalol dans le forum C++
    Réponses: 10
    Dernier message: 26/01/2013, 03h42
  3. Réponses: 2
    Dernier message: 08/09/2011, 09h07
  4. Réponses: 3
    Dernier message: 27/01/2009, 18h17
  5. fuite de memoire dans une liste de pointeur sur composant
    Par Nicolos_A dans le forum Composants VCL
    Réponses: 2
    Dernier message: 16/12/2004, 08h46

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