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

Boost C++ Discussion :

Probleme avec boost::unorderable_map


Sujet :

Boost C++

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut Probleme avec boost::unorderable_map
    Bonjour,
    J'essaye d'utiliser boost::unorderable_map avec un pointeur A* en guise de clés, un objet B en valeur.
    J'ai défini une structure pour récupérer ma clé de haschage (hashA) et une autre pour mon opérateur de comparaison (equalA).

    Voici comment je défini mon unorderable_map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::unorderable_map<A*, B, hashA, equalA> myMap;
    Voici le code de ma structure hashA:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    struct hashA
    {
        std::size_t operator()(const A* & a) const
        {
            return (std::size_t)(a->getId()); //getId() retourne l'identifiant unique de l'objet.
        }
    };
    Malheureusement dès que j'ajoute un objet de la façon suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    A* a = new A();
    B b;
    myMap[a] = b;
    J'obtiens une erreur de compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /usr/local/include/boost/unordered/detail/unique.hpp:183: error: no match for call to '(const hashA) (A* const&)'
        note: candidates are: size_t hashA::operator()(const A*&) const
    Je n'arrive pas du tout à comprendre le problème...

    Si quelqu'un à une idée.

    Merci d'avance.

    PS: Pour info j'ai testé directement en créant une unordered_map avec directement l'objet en clé et ça fonctionne (en modifiant bien sûr la méthode de hashA en operator()(const A& a) ).

  2. #2
    screetch
    Invité(e)
    Par défaut
    tu as un map de A* et tu a un hash de const A*, ces deux types sont différents

    il y a bien un moyen de passer de l'un a l'autre (une conersion) mais la conversion requière une copie (dans ton cas, une copie de pointeur c'est a dire rien du tout)

    en gros:
    * soit tu retires la référence dans std::size_t operator()(const A* & a) const,
    * soit tu retires le const

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Points : 718
    Points
    718
    Par défaut
    Merci pour ta grande réactivité.

    Je venais à l'instant de trouver la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct hashA
    {
      std::size_t operator()(A* var) const;
    };
    Encore merci!

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

Discussions similaires

  1. Probleme avec boost::add_edge
    Par Aiseant dans le forum Boost
    Réponses: 2
    Dernier message: 31/07/2012, 10h38
  2. Probleme avec boost::iostreams
    Par vandamme dans le forum Boost
    Réponses: 1
    Dernier message: 23/02/2009, 08h52
  3. boost - Probleme avec compilateur C++ de visual studio 2005
    Par gilles641 dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 24/01/2006, 19h03
  4. probleme de compilation avec boost
    Par doof dans le forum Bibliothèques
    Réponses: 7
    Dernier message: 07/06/2005, 21h38
  5. probleme avec boost et devcpp
    Par Krost dans le forum Dev-C++
    Réponses: 12
    Dernier message: 02/01/2005, 19h11

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