繁体   English   中英

C ++ std :: hash实现总是确定性的吗?

[英]Are C++ std::hash implementations always deterministic?

我知道std::hash<T>是依赖于实现的,但它们应该是确定性的吗?

我知道如果我在同一个进程中多次运行std::hash<T>函数,我会得到相同的输出。 但是,如果我重新启动该过程,我会获得相同的值吗? 是否有用于std :: hash的种子? 它取决于编译器版本还是其他因素?

是否保证使用输入X我将始终获得输出Y无论过程运行何时启动,机器还是编译器版本?

不, 文档清楚地说明:

哈希函数只需要在程序的单次执行中为相同的输入产生相同的结果; 这允许盐渍哈希防止碰撞DoS攻击。

重点是我的。 这是从C ++ 14开始,但是我们不能假设它可以在C ++ 11中运行,因为没有明确提供这样的保证。

启用std::hash符合Hash要求([hash.requirements]),根据该要求

返回的值仅取决于参数...对于程序的持续时间。

无法保证哈希值在调用之间是稳定的,即使这些调用在同一台机器上具有相同的二进制映像。

根据c ++标准

哈希函数只需要在程序的单次执行中为相同的输入产生相同的结果; 这允许盐渍哈希防止碰撞DoS攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM