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

ajo*_*eps 2 c++ hash std

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

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

是否可以保证输入时无论过程运行何时启动,机器还是编译器版本,X我都会得到输出Y

Sla*_*ica 7

不,文档清楚地说明:

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

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

  • 然后您可以选择 std 的特定实现,检查它是否具有这样的属性并在您的代码中明确使用它。 (2认同)