我正在寻找可能利用我的用例的特定标准的关联数据结构的输入。
目前我正在使用红/黑树来实现将键映射到值的字典(在我的情况下是整数到地址)。
在我的用例中,最大数量的元素是预先知道的(1024),我只会插入和搜索。搜索频率比插入频率高20倍。在过程结束时,我清除结构并再次重复。在使用过程中不能进行分配 - 只有初始预先分配。不幸的是,STL和最新版本的C ++不可用。
有什么见解?
答案 0 :(得分:0)
我最终从示例here实现了一个简单的线性探测器HashTable。我使用MurmurHash3哈希函数,因为我的数据是随机的。
我通过以下方式修改了哈希表:
它比我之前的红/黑树实现更快。我可能做的唯一改变是重新审视散列方案,看看源代码中是否有某些内容可以帮助制作更便宜的哈希。
Billy ONeal建议,给定少量元素(1024),固定数组中的简单线性搜索会更快。我遵循了他的建议并实施了一个并排比较。在我的目标硬件(大约第一代iPhone)上,哈希表的性能比线性搜索的性能高出两比一。在较小的尺寸(256个元素)下,哈希表仍然优越。当然,这些值取决于硬件。在我的环境中,缓存行大小和内存访问速度非常糟糕。但是,寻找这个问题解决方案的其他人会很聪明地听从他的建议并尝试先对其进行分析。