Bei Verwendung der Boost-Bibliothek funktioniert die Funktion boost::hash_combine
wie folgt:
Was ist der Vorteil dieses Ansatzes gegenüber einfach XOR-ing?
Mit XOR-ing kann man sogar die Hash-Funktion verwenden, um ungeordnete Container als Schlüssel zu verwenden, während dieser von der Reihenfolge abhängt.
Es gibt viele bestellte Container wie Listen. Wenn Sie XOR verwenden würden, würden Sie grundsätzlich sagen, dass [0, 1]
dasselbe ist wie [1, 0]
. Das ist offensichtlich nicht der Fall. Es ist viel einfacher, die Methode für ungeordnete Container zu überschreiben, als eine, die viele Kollisionen für geordnete Container erzeugt. XOR hat viele andere unangenehme Eigenschaften. Zum Beispiel, wenn Sie doppelte Elemente haben, dann werden sie sich gegenseitig auslöschen.
Am Ende besteht die Idee für einen Hash darin, einigermaßen sicher zu sein, dass Sie nicht denselben Wert für mehrere Elemente erhalten. XOR passt nicht zu dieser Eigenschaft.