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 probleme d'insertion


Sujet :

SL & STL C++

  1. #1
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut priority_queue probleme d'insertion
    bonjour a tous

    bonjour a tous dans mon programme j'utilise un file de priorité (priority_queue) de la STL dans laquelle je met des instances d'ELEMENT par reference
    (ELEMENT est une classe a part)

    voici l'initialisation de ma file :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    typedef vector<Element*> vectP;
    priority_queue<Elem*, vectP, less< vectP::value_type> > file_attente;

    l'insertion dans la file marche tres bien j'arrive a voir les valeurs elles ont bien inseré mais le probleme c'est quelle ne sont pas ordonne alors qu'elle le devraient.

    voici la maniere dont j'inserre les elements dans la file :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    void ajouterElem(Element* p){
    		file_attente.push(p);
    pourtant ma classe "Element" redéfinit bien l'operateur "<" comme il se doit il me semble


    donc si quelqu'un sait pourquoi ma file n'est pas ordonnee!!!

    merci a vous
    j'espere avoir ete clair

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Bonjour,

    c'est parce que ton vecteur contient des pointeur. Ils sont ordonné suivant la valeur du pointeur...
    Il faut que tu redéfinisse une fonction qui compare les objets pointés par les pointeurs (puif c'est chelou comme phrase )

    genre
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    bool ComparepElement(const Element* a,constElement* b) { return (*a)<(*b);};

  3. #3
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Citation Envoyé par Mongaulois Voir le message
    Bonjour,

    c'est parce que ton vecteur contient des pointeur. Ils sont ordonné suivant la valeur du pointeur...
    Il faut que tu redéfinisse une fonction qui compare les objets pointés par les pointeurs (puif c'est chelou comme phrase )

    genre
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    bool ComparepElement(const Element* a,constElement* b) { return (*a)<(*b);};

    pourtant la fonction de compraison "<" que j'ai redefinit prend bien des pointeurs sur "element" en parametre, la voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    bool operator> (const ELEMENT* p) const
    {
    	return val > p->Val();	
    }
    et d'apres ce que j'ai compris sur l'utilisation de "priority_queue" de la STL ,
    a chaque fois qu'on utilise la methode "push_back()" ou "push_front()" la methode de comparaison "<" sur l'element est appellé pour l'insertion

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Citation Envoyé par kespy13 Voir le message
    pourtant la fonction de compraison "<" que j'ai redefinit prend bien des pointeurs sur "element" en parametre, la voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    bool operator> (const ELEMENT* p) const
    {
    	return val > p->Val();	
    }
    Tu parles d'opérateur < mais tu montres un operator >. L'opérateur > n'est pas utilisée les les différents algorithmes de la SL.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par kespy13 Voir le message
    pourtant la fonction de compraison "<" que j'ai redefinit prend bien des pointeurs sur "element" en parametre, la voici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    bool operator> (const ELEMENT* p) const
    {
    	return val > p->Val();	
    }
    Ca ne change pas le problème... L'appelant de la fonction < est un pointeur (donc une sorte d'unsigned int) donc tu compare des pointeurs

  6. #6
    Membre éclairé
    Inscrit en
    Février 2006
    Messages
    310
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 310
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Tu parles d'opérateur < mais tu montres un operator >. L'opérateur > n'est pas utilisée les les différents algorithmes de la SL.
    desole me suis trompe en copiant collant mais il s'agit bien d'un operator< dans mon code

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef vector<Element*> vectP;
    priority_queue<Elem*, vectP, less< vectP::value_type> > file_attente;
    Le comparateur est donc less< vectP::value_type> avec vectP::value_type qui est Element* soit un pointeur sur Element.
    L'opérateur dont tu donnes le code, qui j''imagine fait partie de la déclaration de la classe Element, permet de comparer un Element à gauche à un pointeur sur un Element à droite ne sera donc jamais appelé.

    MAT.

Discussions similaires

  1. [ADO.NET] Problème avec Insert dans base de données
    Par mpascolo dans le forum Accès aux données
    Réponses: 9
    Dernier message: 24/01/2005, 09h36
  2. Réponses: 2
    Dernier message: 22/07/2004, 00h27
  3. Probleme d'insertion dans la base de données
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 11/06/2004, 16h21
  4. probleme d'INSERT INTO et JavaScript
    Par Matlight dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/03/2004, 15h36
  5. probleme d'insertion d'un Float
    Par neness dans le forum Débuter
    Réponses: 3
    Dernier message: 07/01/2003, 12h32

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