page about std::hash
over on cppreference.com表示自C ++ 14以来的以下内容:
哈希函数只需要产生相同的结果 一次执行程序中的相同输入;这允许盐渍 哈希可以防止DoS攻击。
事实上,C ++标准在[hash.requirements]中提到了这个要求,特别是表哈希要求中的表达式h(k)
:
返回的值仅取决于参数k 计划的持续时间。 [注:因此所有的评价 具有相同k值的表达式h(k)产生与a相同的结果 执行程序。 - 尾注] [注:两种不同 值t1和t2,h(t1)和h(t2)比较的概率相等 应该很小,接近1.0 / numeric_limits ::最大()。 - 结束说明]
在我看来,这个要求是为了迎合用户提供的专业化而引入的,允许盐渍哈希。如果我正确地理解了所有内容,它也允许库提供的std::hash
专业化对程序的不同执行产生不同的结果。
问题:是否有任何C ++ 14标准的实现为std::hash
提供了一个或多个特殊化,这些特化在程序的不同执行中不会始终产生相同的结果给出与每次执行时输入完全相同的值?