📅  最后修改于: 2023-12-03 15:29:51.033000             🧑  作者: Mango
在C++ STL(标准模板库)中,unordered_map
是一个哈希表(unordered associative container)的实现,它的查找和插入操作平均时间复杂度为O(1)。unordered_map
内部实现了一些策略来提高哈希表的效率,其中一个非常重要的参数就是load_factor
。
load_factor
即是负载因子,是一个浮点数,表示哈希表中实际元素的个数和桶(bucket)数的比值。当load_factor
超过某个阈值时(默认值为1.0),哈希表就需要重新分配更大的空间,以减少碰撞(collision)的概率并保持平均复杂度为常数。
在创建unordered_map
的时候,可以通过构造函数或reserve()
函数来设置桶的数量,并在max_load_factor()
函数中设置load_factor
的最大值。例如:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> map;
map.reserve(100); // 设置桶的数量为100
map.max_load_factor(0.5); // 设置load_factor的最大值为0.5
// 插入元素
for (int i = 0; i < 50; ++i) {
map[i] = std::to_string(i) + "th element";
}
std::cout << "当前桶的数量为:" << map.bucket_count() << std::endl;
std::cout << "当前元素个数为:" << map.size() << std::endl;
std::cout << "当前load_factor为:" << map.load_factor() << std::endl;
return 0;
}
在上述示例中,我们通过reserve()
函数将桶的数量设置为100,并使用max_load_factor()
函数将load_factor的最大值设置为0.5。插入50个元素后,程序输出的结果如下:
当前桶的数量为:193
当前元素个数为:50
当前load_factor为:0.259067
可以看到,哈希表的实际桶数量为193,远大于预留的100个,但由于元素个数较少,load_factor
的值只有0.26,也没有超过最大值0.5。
unordered_map
是C++ STL中的一个高效哈希表实现,通过调整load_factor
和桶的数量,可以使哈希表的性能得到最大化的发挥。在实际应用中,建议根据具体情况灵活设置load_factor
值和桶的数量。