每当我需要存储与特定类型的值(键值 - 例如字符串或其他对象)相关联的一些数据时,我通常使用C++ stdlib映射.stdlib映射实现基于树,它提供比标准数组或stdlib向量更好的性能(O(log n)).
我的问题是,你知道任何C++"标准"哈希表实现提供更好的性能(O(1))吗?类似于Java API中Hashtable类中可用的内容.
在我的环境中,Gperf 的性能始终低于 Judy 数组,我想知道是否有另一个专门为整数键构建的完美哈希库。我事先知道一组键,并且我想利用它来获得性能/尺寸优势。
有大约 1000 个键,并且检索不按顺序排列。密钥对都是整数。密钥是 32 位,检索的值是 8 位。尺寸是最重要的因素。
如果有一种方法可以针对整数键调整 Gperf,或者只是另一种方法,我也会洗耳恭听。:)
(旁注:...在输入这个问题时,我意识到二分搜索可能会更有效,而且我只是过度思考了这个问题。为了学习,我仍然想听听您的任何想法,尽管!)
编辑:键分布不均匀。大多数是在整个可能的范围内随机聚集的。
编辑 2:最坏情况的二进制搜索对我来说太慢了,所以我最终使用了这些键,直到我找到每个键可以使用 8 位来创建 256 个均匀分布的存储桶。我保存了每个桶的最小值和最大值(每个桶条目 24 位),并为密钥对创建了一个大的结构数组。与我在特定情况下测试的其他所有产品相比/更快且更小,所以我想我现在就采用它。:)