Combinaison de valeurs de hachage en C 0x
C 0x a introduit le hachage<> template, qui fournit une fonction de hachage générique. Cependant, une fonction hash_combine, telle qu'implémentée dans Boost, n'est pas incluse nativement. Cet article explore les méthodes pratiques pour implémenter une telle fonction dans C 0x.
Solution utilisant xor_combine
Une approche consiste à exploiter xor_combine de C 0x. Cette fonction combine deux valeurs de hachage en les effectuant par XOR. Voici un exemple d'implémentation :
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { seed ^= hash<T>{}(v); }
Cette méthode effectue simplement un XOR sur le hachage de la valeur v avec la graine.
Solution utilisant hash_combine de Boost
Alternativement, vous pouvez adapter l'implémentation Boost de hash_combine :
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { std::hash<T> hasher; seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); }
Cette fonction calcule le hachage de v en utilisant std::hash<> et le combine avec la graine à l'aide d'une opération XOR au niveau du bit.
Les deux approches fournissent des méthodes pour combiner les valeurs de hachage en C 0x. Le choix de la mise en œuvre dépend des exigences spécifiques de l'application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!