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 :

probl�me avec sort() et operator<


Sujet :

C++

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    620
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 620
    Par d�faut probl�me avec sort() et operator<
    Bonjour,

    Je ne sais pas si je n'aurais pas d� poster dans la section STL ? Mais je ne crois pas que ce soit un pb STL � proprement parler...bref, voici :
    J'ai une classe point :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class point{
         public :
            double x, y, angle;
            bool operator< (const point& p1);
    };
     
    bool point::operator< (const point &p1)
    {
      if (angle < p1.angle) return true;
      return false;
    }
    et dans une autre classe, j'ai un vector de point, auquel je fais subir ce traitement :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    vector<point> liste;
     
    /*initialisations, machin patin, couffin */
     
    sort(liste.begin(),liste.end());
    moyennant quoi, je me retrouve avec :

    no match for 'operator<' in '__a < __b'
    candidats sont:bool point::operator<(const point&) <near match>

    Ce near match me tue...qqn aurait une suggestion ? Apparemment sort est malheureux avec ma d�finition de operator<...

    Merci

    Hugo

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Essaie ceci:
    Code C++ : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class point{
         public :
            double x, y, angle;
            bool operator< (const point& p1) const;
    };
     
    bool point::operator< (const point &p1) const
    {
      if (angle < p1.angle) return true;
      return false;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    620
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 620
    Par d�faut
    PS : quand je fais un test "� la main" genre :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    point p1,p2;
    /* initialisations*/
    if (p1<p2)
    �a marche tr�s bien...

  4. #4
    Membre �clair�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    620
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 620
    Par d�faut
    Medinoc, t'es trop fort !!! Merci beaucoup .
    Ca tient � quoi ??

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    �a tient au fait que sort() passe des r�f�rences const, sans doute...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre �m�rite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    D�tails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par d�faut
    Oui, std::sort utilise des r�f�rence const, donc il faut que tu indiques que ta fonction operator<() ne modifie pas l'objet.

    sinon tu peux aussi en faire une fonction non-membre

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class point
    {
    public:
        friend bool operator<( const point & p1, const point & p2 );
    };
     
    bool operator<( const point & p1, const point & p2 )
    {
        retun p1.angle < p2.angle;
    }

  7. #7
    Membre �clair�
    Profil pro
    Inscrit en
    Ao�t 2006
    Messages
    620
    D�tails du profil
    Informations personnelles :
    �ge : 48
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 620
    Par d�faut
    merci beaucoup � vous deux
    Vous m'avez s�rement gagn� un temps fou !!

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. perl objet probl�me avec l'instruction "sort"?
    Par lecosmotien dans le forum Langage
    R�ponses: 10
    Dernier message: 01/10/2010, 16h05
  2. R�ponses: 0
    Dernier message: 18/06/2009, 11h42
  3. Probl�mes avec operator<<
    Par Kicker dans le forum D�buter
    R�ponses: 4
    Dernier message: 27/10/2008, 19h09
  4. R�ponses: 17
    Dernier message: 03/06/2008, 13h19
  5. Probl�me avec Sort() sur un TList
    Par ViNzZz dans le forum C++Builder
    R�ponses: 4
    Dernier message: 15/08/2006, 14h45

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