我正在开发一个低延迟应用程序,需要始终高效。
我需要根据字符串查找一些索引,因此我使用了c++的unordered_map。 约束条件: -仅插入和查找,无删除 -键是字符串,值是整数 -不希望向unordered_map中添加超过100万条目
我将unordered_map的reserve设置为100万,这样好吗?还是应该按预期条目数量的某个百分比进行保留以避免重新哈希? 我可以将其设置为100万,还是应该设置为接近100万的大质数或2的幂。
我正在使用c++ std lib中的默认字符串哈希函数,它恰好是murmur2。 我的键介于25到50个字符之间,并且都是包含数字、大写英文字母和_字符的唯一键。这个哈希函数是否足以平均分配键,或者我需要提供更好的哈希函数给unordered_map使用?
当我调用reserve时,unordered_map会为100万个键值对和大小为100万的数组分配空间,还是只有该大小的数组被创建,键值对在插入时动态分配?
由于这是一个具有许多条目的大哈希表,堆上的键值对的动态分配会产生多少负担?
出于性能原因,是否实现自己的哈希表并在堆栈或初始化期间预先分配100万个条目的内存是一个好主意,或者上述unordered_map的优化足够接近?
有没有办法提前为unordered_map中预期的条目数分配内存,以避免插入时的动态分配?
(Note: 请注意保留HTML标记)
max_load_factor
,而它的默认值是1.0。 - detunizedunordered_map
实现,它在hashtable_policy.h
中将桶的数量乘以_S_growth_factor
(即2
),然后从提供的列表__prime_list
中取比结果大的最小质数。因此,2144977
就是由此而来。 - detunized