Kombinieren von Hash-Werten in C 0x
C 0x führte den Hash ein<> Vorlage, die eine generische Hash-Funktion bereitstellt. Allerdings ist eine hash_combine-Funktion, wie sie in Boost implementiert ist, nicht nativ enthalten. In diesem Artikel werden praktische Methoden zur Implementierung einer solchen Funktion in C 0x untersucht.
Lösung mit xor_combine
Ein Ansatz besteht darin, xor_combine von C 0x zu nutzen. Diese Funktion kombiniert zwei Hashwerte durch XOR-Verknüpfung. Hier ist eine Beispielimplementierung:
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { seed ^= hash<T>{}(v); }
Diese Methode verknüpft einfach den Hash des Werts v mit dem Startwert per XOR.
Lösung mit Boosts hash_combine
Alternativ können Sie die Boost-Implementierung von anpassen 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); }
Diese Funktion berechnet den Hash von v mithilfe von std::hash<> und kombiniert es mit dem Seed mithilfe einer bitweisen XOR-Operation.
Beide Ansätze bieten Methoden zum Kombinieren von Hashwerten in C 0x. Die Wahl der Implementierung hängt von den spezifischen Anforderungen der Anwendung ab.
Das obige ist der detaillierte Inhalt vonWie kombiniere ich Hash-Werte in C 0x effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!