hash_value-Funktion in C ++ 11

8

Die Boost-Bibliothek bietet eine Komfortfunktion hash_value , die im Grunde nur aufgerufen wird:

%Vor%

Soweit ich das sehen kann, enthielt C ++ 11 std::hash , was sehr ähnlich zu boost::hash ist, aber nicht std::hash_value . Dies erfordert einen Anwendungscode, um ein hash -Objekt zu erstellen und es als operator() aufzurufen, anstatt nur eine bequeme Funktion aufzurufen. Gibt es einen Grund, dass std::hash_value nicht standardisiert wurde?

    
Siler 19.11.2013, 23:59
quelle

1 Antwort

4

Die primäre Verwendung der Funktion std::hash<T> ist das Objekt, das zum Abrufen eines Hashwerts von einem Schlüssel in der Containergruppe std::unordered_* verwendet wird. Diese werden immer ein entsprechendes Objekt enthalten und verwenden, möglicherweise unter Verwendung der leeren Basisoptimierung, um zu vermeiden, dass es irgendeinen Speicher belegt. Immer wenn der std::hash<T> -Typ verwendet wird, ist tatsächlich ein Objekt vorhanden.

Obwohl das Funktionsobjekt eigenständig verwendet werden kann, ist es wahrscheinlich selten. Auch für andere, ähnliche existierende Funktionsobjekte gibt es keine entsprechenden Komfort-Aufruffunktionen: obwohl die meisten von ihnen Wrapper für Operatoren sind, könnte std::less<void*> interessant sein, Stand-Alone aufzurufen, da Sie ptr1 < ptr2 (mindestens , es könnte nicht in C ++ 03 verwendet werden, wenn ptr1 und ptr2 nicht Teil desselben Array-Objekts sind). Das heißt, es gab keinen geeigneten Vorrang.

Schließlich würde ich annehmen, dass die Bequemlichkeitsfunktion einfach nicht Teil des Vorschlags war: Wenn sie nicht vorgeschlagen wird und es keinen wirklich guten Fall gibt, wird nichts in den C ++ - Standard aufgenommen. Wie es aussieht, scheint n1456 zumindest zu sein , eine Revision des Vorschlags "Hashtabelle" und keine Spur von std::hash_value<T>() .

    
Dietmar Kühl 20.11.2013, 00:20
quelle

Tags und Links