【发布时间】:2013-10-30 06:02:55
【问题描述】:
我正在开发一个需要始终保持高效的低延迟应用程序。
我需要根据字符串查找一些索引,所以我使用的是 c++ unordered_map。 约束: - 只有插入和查找,没有删除 -key 是字符串,值是 int - 预计添加到 unordered_map 的条目不超过 100 万个
我将 unordered_map 保留设置为 100 万,这是好还是应该保留比预期条目多 % 的顺序以避免重新散列? 我可以将其设置为 100 万,还是应该设置为接近 100 万或 2 次方的大素数。
我在 c++ 标准库中使用默认字符串哈希函数,它恰好是 murmur2。 我的键介于 - 25 到 50 个字符之间,并且都是包含数字、大写英文字母和 _ 字符的唯一键。这个散列函数是否足以均匀分布密钥,还是我需要为 unordered_map 提供更好的散列函数?
unordered_map 是否会为 100 万个键、值对以及大小为 100 万的数组分配空间,当我调用保留或保留时,仅创建该大小的数组并动态分配键、值对插入时?
插入时在堆上动态分配键、值对会有多大的阻力?特别是因为这是一个包含许多条目的大哈希表。
-
出于性能原因,最好实现我自己的哈希表,并在堆栈上或初始化期间为 100 万个条目预分配内存,或者上述 unordered_map 的优化是否足够接近?
有没有办法提前为 unorderd_map 中的预期条目数分配内存以避免插入时动态分配?
【问题讨论】:
标签: c++ hashmap hashtable unordered-map low-latency