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 :

surcharge d'un operateur de comparaison dans une priority_queue


Sujet :

C++

  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Par d�faut surcharge d'un operateur de comparaison dans une priority_queue
    bonjour,

    je dois utiliser une priority_queue mais avec mon prorper operateur de comparaison.

    voici comment je d�fini la priority_queue.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
            std::priority_queue< std::vector<std::set<CClause*> * >, CompareClause() > Q;
    et le compareClause est ici.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    struct CompareClause{
     
        bool operator ()( const std::set<CClause*> *p, const std::set<CClause*> *q ) 
        { 
            return p->size() < q->size() ; 
        } 
     
    };

    j'aurais cru qu'il fallait utiliser les foncteurs, mais il m'envoi ballader.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ocuments/Logic$ make -j 2
    g++ -o Antichaine.o -c Antichaine.cpp -Wall -ansi
    Antichaine.cpp: In member function ‘void CAntichaine::construireA()’:
    Antichaine.cpp:20: erreur: ‘CompareClause ()()’ is not a class, struct, or union type
    Antichaine.cpp:20: erreur: patron de l'argument 3 est invalide
    Antichaine.cpp:20: erreur: invalid type in declaration before ‘;’ token
    Antichaine.cpp:20: attention : unused variable ‘Q’
    make: *** [Antichaine.o] Erreur 1
    elekis@carla:~/Documents/Logic$
    le truc, c'est que l'on doit mettre pas mal d'�l�ment dedans (des std::set<Clause*> ) et apres on doit les retirer un a un du plus grand au plus
    petit. et on voudrais que le plus grand est celui qui a le plus grand nombre de clause.


    merci

    a+++

  2. #2
    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
    Ce n'est pas une instance du foncteur que tu dois sp�cifier en param�tre template, mais son type :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    std::priority_queue< std::vector<std::set<CClause*> * >, CompareClause>
    Apr�s si ce n'est pas une instance par d�faut qu'il faut utiliser (ce qui n'est pas le cas ici) il y a normalement un constructeur appropri�.

  3. #3
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Par d�faut
    heu... merci,

    mais je comprend pas trop la seconde phrase.


    mnt , j'ai cela.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    elekis@carla:~/Documents/Logic$ make -j 2
    g++ -o Antichaine.o -c Antichaine.cpp -Wall -ansi
    g++ -o ClauseManager.o -c ClauseManager.cpp -Wall -ansi
    Antichaine.cpp: In member function ‘void CAntichaine::construireA()’:
    Antichaine.cpp:20: erreur: no type named ‘value_type’ in ‘struct CompareClause’
    Antichaine.cpp:20: erreur: patron de l'argument 3 est invalide
    Antichaine.cpp:20: erreur: invalid type in declaration before ‘;’ token
    Antichaine.cpp:20: attention : unused variable ‘Q’
    make: *** [Antichaine.o] Erreur 1
    make: *** Attente des tâches non terminées....
    elekis@carla:~/Documents/Logic$
    je comprend pas, je dois definir une value_type?? mais c'est quoi?

    et pourquoi il ne faut pas de () mais son type. dans l'exemple
    http://c.developpez.com/faq/cpp/?pag...TL_custom_sort
    c'est bien une instance qu'on passe. a la fonction sort??


    merci pour tout.

    a++

  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
    Le message d'erreur parle de l'argument 3 (qui devrait �tre l'allocateur), or dans ce que tu nous montres il n'y en � que deux. On peut voir le vrai code ?

    et pourquoi il ne faut pas de () mais son type. dans l'exemple
    http://c.developpez.com/faq/cpp/?pag...TL_custom_sort
    c'est bien une instance qu'on passe. a la fonction sort??
    Parce que std::priority_queue<...> est un type, pas une fonction. Il attend en param�tre template le type du foncteur � utiliser, pas une instance de celui-ci.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct Foncteur
    {
        bool operator ()(int x, int y) const
        {
            return x < y;
        }
    };
     
    std::priority_queue<int, Foncteur> Q;
    Ta priority_queue va ensuite cr�er une instance par d�faut de Foncteur, pour appeler son op�rateur (). Ce que je disais c'est que si par hasard tu voulais utiliser une instance bien particuli�re, pas construite par d�faut, tu peux le faire ainsi :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct Foncteur
    {
        Foncteur(std::string Param) {...}
     
        bool operator ()(int x, int y) const
        {
            return x < y;
        }
    };
     
    std::priority_queue<int, Foncteur> Q(Foncteur("toto"));

Discussions similaires

  1. Operateur de comparaison dans une formula
    Par Cofondinde dans le forum Hibernate
    R�ponses: 2
    Dernier message: 19/05/2011, 10h09
  2. insertion et comparaison dans une collection
    Par Mykhell dans le forum PL/SQL
    R�ponses: 0
    Dernier message: 18/06/2009, 15h07
  3. Comparaison dans une boucle
    Par dam28800 dans le forum Langage
    R�ponses: 20
    Dernier message: 13/11/2008, 14h27
  4. Probl�me de comparaison dans une proc
    Par hpavavar dans le forum SQL Proc�dural
    R�ponses: 7
    Dernier message: 27/02/2007, 13h34
  5. R�ponses: 27
    Dernier message: 12/01/2006, 11h04

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