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 :

priority_queue ignore ma fonction de comparaison


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut priority_queue ignore ma fonction de comparaison
    Bonjour,

    J'essaie de me servir d'une priority queue sur une classe personnelle, tout compile, pas de warning, mais j'ai la nette impression que ma fonction personnalisée de tri n'est pas prise en compte:
    J'ai des objets HedgeEval dans ma priority queue definis comme tels:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class HedgeEval
    {
        public:
            OGLRMesh::HalfedgeHandle heh;
            float eval;
            HedgeEval( OGLRMesh::HalfedgeHandle h, float ev){ heh = h; eval = ev; };
    };
    Je définis ma fonction de comparaison dans une classe, comme indiqué dans les tutos STL que j'ai trouvé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class CompareHedgeEval
    {
        public:
            bool operator()( const HedgeEval& he1,  const HedgeEval& he2) const
            {
                if(he1.eval > he2.eval) return true;
                else return false;
            }
    };
    je crée ma priority_queue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    std::priority_queue< HedgeEval, vector< HedgeEval >, CompareHedgeEval > halfEdgeQueue;
    Et lorsque j'affiche les différentes valeurs de ma priority_queue, ils sont classés en ordre décroissant. J'ai donc essayé de modifier mon operator() en inversant les booléens de retour (true a la place de false et vice versa),
    ou encore en remplacant < par >, ou meme en mettant juste un
    J'ai invariablement mes éléments classés dans le meme ordre.
    quelqu'un saurait il d'ou vient le probleme?

    Merci

    Z

  2. #2
    Membre émérite Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Par défaut
    Bonjour,

    Tout ce que je peux te dire, c'est que le comparateur est censé retourner « vrai » lorsque le premier élément est strictement inférieur au second.
    Et donc « faux » dans tous les autres cas…

    Chez moi, en modifiant l'opérateur « () », l'ordre des élément est modifié.
    Je ne sais pas quoi dire.

    Ce que tu peux faire, à la limite, c'est définir un opérateur « < » pour ta classe « HedgeEval ».
    Enfin, à condition qu'il n'y en a pas déjà un…
    Par défaut, c'est cet opérateur qui est utilisé pour comparer les éléments deux à deux.

    J'espère que cela pourra t'aider.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Par défaut
    bonjour, et merci pour ta reponse.
    J'ai bidouillé mon code sur une partie qui n'a rien a voir avec ce probleme... et de maniere tout a fait inexplicable a mes yeux... ben ca marche...

    encore merci

    Z

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par zeder59 Voir le message
    bonjour, et merci pour ta reponse.
    J'ai bidouillé mon code sur une partie qui n'a rien a voir avec ce probleme... et de maniere tout a fait inexplicable a mes yeux... ben ca marche...

    encore merci

    Z
    C'est pas très rassurant sur les effets de bords de ta classe. A ce stade, j'aurais tendance à reprendre mon architecture, regarder ce qui va ou pas et au moins essayer de comprendre pourquoi ça ne marchait pas avant et ça marche ensuite. Bref, ça sent pas bon comme changement brusque de comportement

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

Discussions similaires

  1. [BATCH] Fonctions de comparaison de chaînes?
    Par Jahprend dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 29/06/2008, 17h05
  2. "Sorting" d'un vecteur avec une fonction de comparaison
    Par C.R.E.A.M dans le forum SL & STL
    Réponses: 4
    Dernier message: 02/02/2008, 17h25
  3. Fonction de comparaison de chaînes
    Par Shugo78 dans le forum C
    Réponses: 2
    Dernier message: 11/11/2007, 16h02
  4. find() de std::set avec fonction de comparaison
    Par Biglo dans le forum SL & STL
    Réponses: 3
    Dernier message: 13/01/2006, 08h50
  5. Le linker ignore les fonctions non implémentées
    Par Rodrigue dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/03/2005, 13h31

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