이하에서는 N4140 (C ++ 14 표준)을 사용합니다.
에 따르면 17.6.3.4 해시 요구 사항을 § ,
반환 된 값
k
은 프로그램 기간 동안의 인수에만 의존해야 합니다 .[참고 : 따라서
h(k)
동일한 값을 가진 표현식의 모든 평가 는 주어진 프로그램 실행에 대해k
동일한 결과 를 산출합니다 . — 끝 참고]
및 § 20.9.12 클래스 템플릿 해시 말한다
...
인스턴스화
hash<Key>
는 :(1.1) — 해시 요구 사항 (17.6.3.4)을 충족시킨다 ...
(1.2) — ...
value
즉 hash<decltype(value)>(value)
, 프로그램을 다시 시작하면 해시 값 (예 :)이 다른 값을 가질 수 있습니다.
그런데 왜? 이 제한은 C ++ 11 표준이 아니라 C ++ 14, C ++ 17 및 C ++ 20 표준에있었습니다. STL 개발자가 아닌 사용자로서 std::hash
결정적 이라면 상당히 유용합니다 . 결정적 해시 함수를 구현하는 데 수학적 어려움이 있습니까? 그러나 우리가 매일 사용하는 해시 함수 (예 : 더 이상 사용되지 md5sum
않거나 더 안전한 sha256
)는 모두 결정적입니다. 효율성에 문제가 있습니까?