这个问题已经困扰了我很长一段时间,今天我读了一篇与哈希表相关的详细文章。不检查任何实现示例我想从头开始编写哈希表。
单独链接方法给了我实现哈希表的想法。任何有数据结构经验的人都会把这个问题视为一个笑话,但我是初学者而且没有直接深入研究我想讨论我的实现效率的代码。是否有效率或任何其他基本想法可能比这更受欢迎?
答案 0 :(得分:0)
我认为对于初学者,您还可以查看在boost库中实现的一些哈希映射的源(或文档)。它被称为unordered_map。 (link is here)
只要您不了解这些实现并且想要使用哈希并且您因为它不在STL中而烦恼,您就会对编写自己的快速数据存储感兴趣。
但是现在实现哈希映射是如此之多,以至于C ++ 11在其STL中具有unordered_map。你会看到那里有很多有趣的东西。
注意:单独的链接称为桶哈希。实际上, boost使用桶哈希,请参阅this link。也许你宁愿查看一些性能比较。有可能这些人会做出足够好的实施。
答案 1 :(得分:0)
使用封闭寻址,另一种选择是使用自平衡二进制搜索树,例如, red-black tree / std :: map或heap tree,用于内部数据结构,甚至是另一个具有不同散列算法的哈希映射。
使用open addressing,线性探测的另一种替代方法是二次探测和double hashing;还有较少使用的策略,如布谷鸟哈希,跳房子哈希等等。
实现哈希表的关键点是选择正确的哈希算法,调整策略(加载因子)和冲突解决策略。最佳策略高度依赖于您期望的工作负载类型,因为每种方法都需要权衡。