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 :

hash fonction pour un tuple


Sujet :

SL & STL C++

  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Par défaut hash fonction pour un tuple
    slt à toute la communauté,
    je suis nouveau ici et espère trouver des réponses à mes questions. Beh voilà, je travaille sur un projet de traitement d'images et nous utilisons STL et BOOST. Au départ j'avais déclarer une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    map< boost::tuples::tuple<int, int, int>, float > mCellIndex;
    .
    Dans le souci d'optimiser la recherche dans ma map, j'ai changé la déclaration en hash_map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hash_map< boost::tuples::tuple<int, int, int>, float > mCellIndex2;
    .

    Le problème est qu'il ya pas de hash fonction pour les tuples. Comment donc faire?.
    Cependant en regardant dans le fichier: hash_func.h, j'ai écris un hash semblabe à celui des int, le voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    template<> 
       struct hash<boost::tuples::tuple<int, int, int> >
        { 
          size_t
          operator()(boost::tuples::tuple<int, int, int> __x) const
          { 
          	return  __x.get<0>()+ __x.get<1>()+ __x.get<2>();
          }
        };
    et je l'ai déclaré avant la fonction main(). Cependant j'ai une érreur lors de la compilation:
    ../main.cpp:18: error: specialization of 'template<class _Key> struct __gnu_cxx::hash' in different namespace
    /usr/include/c++/4.3/backward/hash_fun.h:71: error: from definition of 'template<class _Key> struct __gnu_cxx::hash'
    make: *** [main.o] Fehler 1
    .

    Avez une idée du problème?, et comment contourner?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    T'as essayé avec le hash de boost ?
    Sinon le message d'erreur est explicite, t'as pas spécialisé le hash de GNU dans le bon espace de nom.

    Tu ferais mieux d'utiliser unordered_map plutôt que hash_map, par ailleurs, puisque unordered_map est standard et pas hash_map.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 30
    Par défaut
    ah j'ai trouvé, en fait je devais definir ma propre fonction hash comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    struct Hachoire
       {
           unsigned operator()(const MonType &rhs) const
            {
               // faites vos opérations ici
                  return valeur_de_hachage;
             }
     };
    et l'appeler dans la declaration avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    hash_map< MonType, MonAutreType, Hachoire> mappa;
    Merci

Discussions similaires

  1. Réponses: 12
    Dernier message: 02/09/2009, 18h24
  2. Fonction pour savoir si un ordi est connecté au reseau
    Par LitteulKevin dans le forum Windows
    Réponses: 17
    Dernier message: 13/09/2004, 14h12
  3. Réponses: 2
    Dernier message: 04/09/2004, 10h53
  4. Détourner une fonction pour copier un fichier en mémoire
    Par Rodrigue dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/11/2003, 08h29
  5. Fonction pour récuperer mon adresse IP
    Par néo333 dans le forum Web & réseau
    Réponses: 11
    Dernier message: 01/11/2003, 17h35

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