此后,我们使用N4140(C ++ 14标准)。
根据第17.6.3.4节哈希要求,
返回的值应仅取决于
k
程序持续时间内的参数。[注意:因此,对于给定的程序执行,
h(k)
具有相同值的表达式的所有求值都会k
产生相同的结果。—尾注]
和§12年9月20日类模板哈希说
...
实例
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
)都是确定性的。有效率问题吗?