Di seguito, utilizziamo N4140 (standard C ++ 14).
In base al § 17.6.3.4 Requisiti di hash ,
Il valore restituito dipende solo dall'argomento
kper la durata del programma .[Nota: pertanto tutte le valutazioni dell'espressione
h(k)con lo stesso valore perkproducono lo stesso risultato per una data esecuzione del programma . - nota finale]
e dice l' hash del modello di classe 20.9.12
...
l'istanza
hash<Key>deve:(1.1) - soddisfa i requisiti Hash (17.6.3.4) ...
(1.2) - ...
Ciò significa che un valore di hash di value(ovvero hash<decltype(value)>(value)) può assumere un valore diverso se si riavvia il programma.
Ma perché? Questa limitazione non era nello standard di C ++ 11, ma nello standard di C ++ 14, C ++ 17 e C ++ 20. Come utente (non uno sviluppatore STL), sarebbe piuttosto utile se std::hashfosse deterministico. Ci sono difficoltà matematiche nell'implementazione di una funzione hash deterministica? Ma le funzioni hash che utilizziamo quotidianamente (ad es. Deprecate md5sumo più sicure sha256) sono tutte deterministiche. C'è un problema di efficienza?