2017-05-30 2 views
0

J'essaie de créer une carte non ordonnée en utilisant une paire comme clé. Ceci est quelque chose de nouveau pour moi, donc je l'ai suivi quelques tutoriels et j'ai écrit ceci:La norme C++ ne fournit pas de hachage pour ce type

struct pair_hash { 
     template <class T1, class T2> 
     std::size_t operator() (const std::pair<T1, T2> &p) const { 
      auto h1 = std::hash<T1>{}(p.first); 
      auto h2 = std::hash<T2>{}(p.second); 

      return h1^h2; 
     } 
    }; 

int wmain(int argc, wchar_t * argv[]) 
{ 
    {...} 

    using Key = std::pair<DWORD, DWORDLONG>; 
    std::unordered_map<Key, USN, pair_hash> mymap; 


    std::pair<DWORD, DWORDLONG> mypair(dwVolSN, fileId); 

    mymap.insert({ mypair, usn }); 

    std::unordered_map<Key, USN>::const_iterator got; 
    got = mymap.find(mypair); // HERE I GET THE ERROR 

    return 0 

} 
+2

Quelle est votre question? – 0x5453

+0

Je ne sais pas comment passer le résultat de mymap.find (mypair) à "got", j'obtiens l'erreur suivante à la construction: La norme C++ ne fournit pas un hachage pour ce type –

Répondre

8

Essayez std::unordered_map<Key, USN,pair_hash>::const_iterator got;

ou auto got = mymap.find(mypair);

+0

Merci! C'était le problème, je n'ai pas vu que j'avais oublié le "pair_hash"! J'étais coincé ici pendant 1 heure! Je vous remercie! –