93 votes

Comment combiner des valeurs de hachage en C++0x ?

C++0x ajoute hash<...>(...) .

Je n'ai cependant pas trouvé de fonction hash_combine, comme celle présentée dans le document booster . Quelle est la manière la plus propre d'implémenter quelque chose comme ça ? Peut-être, en utilisant C++0x xor_combine ?

103voto

Karl von Moor Points 4550

Eh bien, fais-le comme les gars du boost :

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);
}

28 votes

Oui, c'est le mieux que j'ai pu faire aussi. Je ne comprends pas comment le comité de normalisation a pu refuser quelque chose d'aussi évident.

2 votes

Existe-t-il quelque chose comme cela dans la librairie std, ou une version à venir de la librairie std ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X