我有一些随机测试参数,我需要计算哈希值来检测我是否使用相同的参数运行。我可能会使用在不同时间重新编译的相同源来运行测试,或者在不同的机器上运行。
即便如此,我想检测运行时是否使用了相同的参数。
做std::hash
对于不同的编译版本和不同的机器,相同的输入会给出相同的结果吗?
e.g.
std::hash<string>{}("TestcaseParamVal0.7Param0.4");
这将始终是唯一的号码吗?
No, std::hash
不保证跨计算机、构建甚至在同一计算机上执行相同构建的结果将是相同的。您唯一的保证是在一次执行期间,相等的对象具有相同的哈希值。 (当然,不能保证不相等的对象具有不同的哈希值。)
一些实现会不遗余力地在执行之间更改哈希结果,因为它可以减轻由于存在许多具有相同哈希的键时哈希表性能不佳而导致的拒绝服务风险。标准明确允许这样做,仅保证结果在程序持续时间内保持一致。
如果您需要执行和机器之间的可重复性,则不能使用std::hash
并且必须推出自己的同等产品。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)