对于常规类型,我的意思是在Elements of Programming中对 Stepanov 的定义,基本上,有相等的概念,并且作为彼此副本的对象比较相等。
所以当你有一个 Regular Type T
,并且等式关系是传递的(a == b && b == c => a == c),你可以定义一个(非平凡的)散列函数,它与定义一致平等(a == b => h(a) == h(b))。总是。
但该标准不包括许多std::hash
专业。例如std::complex
,没有容器,容器也没有,除了vector<bool>
和bitset
。
所以我想知道这里的设计原则是什么。
或者,换种方式问:是否有理由不std::hash
为您自己的类型提供专业化,只要它们是常规的并且相等是可传递的?