Une bonne fonction de hachage pour un vecteur
J'ai un vecteur d'entier que je voudrais stocker efficacement dans un unordered_map en c++11, ma question est: est-ce
Comment puis-je mieux les stocker ces et d'optimiser pour .find
requêtes?
Je suis venu avec la suite de hasher:
class uint32_vector_hasher {
public:
std::size_t operator()(std::vector<uint32_t> const& vec) const {
std::size_t ret = 0;
for(auto& i : vec) {
ret ^= std::hash<uint32_t>()(i);
}
return ret;
}
};
puis stocker les objets dans un unordered_map
j'ai cependant quelques questions
- quelle est la fréquence de hachage calculée, seulement un, certain nombre aléatoire ou temps?
- Serait-il judicieux de créer un objet wrapper avec
==
et les fonctions de hachage à faire mémoriser les valeurs de hachage et éviter qu'elle ne soit calculé plus d'une fois?
Lorsque le profilage j'ai remarqué qu'une quantité assez importante de mon cpu de temps à faire des recherches sur le non ordonnée des cartes, ce n'est pas exactement optimal 🙁
source d'informationauteur Martin Kristiansen
Vous devez vous connecter pour publier un commentaire.
Toujours aller avec les experts lorsque cela est possible:
http://www.boost.org/doc/libs/release/doc/html/hash/reference.html#boost.hash_combine
Donc, quand ne pas vouloir utiliser boost, Michael Blurr du commentaire dirigé à la suite de fonction de hachage de mise en œuvre:
Semble fonctionner.