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++

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    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 éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    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 habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    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 : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    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 éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    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 habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Points : 144
    Points
    144
    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