gpt4 book ai didi

C++11 : Are there reasons why some Regular Types should not have `std::hash` specialised?

转载 作者:IT老高 更新时间:2023-10-28 22:22:27 24 4
gpt4 key购买 nike

对于常规类型,我的意思是编程元素中 Stepanov 的定义,基本上,有相等的概念,并且相互复制的对象比较相等。

所以当你有一个常规类型 T ,并且等式关系是传递的(a == b && b == c => a == c),可以定义一个(non-trivial)散列函数这与相等的定义一致(a == b => h(a) == h(b))。总是。

但标准中并没有很多 std::hash 专业。例如。 std::complex 没有,容器也没有,vector<bool> 除外。和 bitset .

所以我想知道这里的设计原则是什么。

或者,换个方式问:有理由不提供std::hash您自己的类型的特化,只要它们是常规的并且相等是可传递的?

最佳答案

是的。

当一个类型有以下两个属性时,我认为你不应该定义 std::hash:

  • 没有有效的方法来始终如一地创建覆盖所有用于描述相等性的数据的高质量哈希。

  • 没有有效和/或直观的方法来选择一致的数据子集进行散列。

关于C++11 : Are there reasons why some Regular Types should not have `std::hash` specialised?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29969322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com