【发布时间】:2011-11-01 04:39:50
【问题描述】:
我需要专门化 unordered_map 的散列函数,以便可以使用 int 数组作为键。数组值通常为 0 或 1,例如int array = {0, 1, 0, 1},但技术上没有限制。
在这种情况下,有人可以推荐一个好的哈希函数吗?或者,我总是可以将 int 数组转换为字符串并避免专门化。但我担心性能,因为我可能有几百万个这样的数组。
【问题讨论】:
-
使用或模仿 Boost 的“范围哈希”。它是通过反复调用
hash_combine建立起来的,它也在 Boost 中,应该确实在标准中。 -
如果您确实有几百万个这样的数组,我建议您使用新的算法/数据结构...
-
@Blindy 你会建议什么数据结构?
-
@Kerreck,boost.org/doc/libs/1_35_0/doc/html/boost/… 说它不适合无序容器。这不适用于我的情况吗?
-
@gewizz:这是草率的措辞。获取无序容器作为一个整体的确定性哈希是不合适的[排序可能取决于负载因子和完成的重新分配次数]。但是,当然适合用作无序容器的元素哈希函数