📜  C++ STL中的unordered_set max_load_factor()(1)

📅  最后修改于: 2023-12-03 14:39:52.776000             🧑  作者: Mango

C++ STL 中的 unordered_set::max_load_factor()

简介

max_load_factor() 是 C++ STL 中 unordered_set 的一个成员函数,用于获取或设置 unordered_set 的最大负载因子。负载因子是指哈希表中元素的数量与桶的数量之比,当负载因子过高时,哈希表的性能会下降。

该函数的原型为:

float max_load_factor() const;
void max_load_factor(float ml);
默认值

当创建 unordered_set 对象时,如果没有提供 max_load_factor 参数,则默认的最大负载因子为 1.0。

用法举例

下面的代码片段演示了如何在 unordered_set 中使用 max_load_factor() 来控制负载因子。

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> myset = {1, 2, 3, 4, 5};
    
    // 获取当前最大负载因子
    std::cout << "Current max_load_factor is " << myset.max_load_factor() << std::endl;
    
    // 设置最大负载因子
    myset.max_load_factor(0.5);
    std::cout << "New max_load_factor is " << myset.max_load_factor() << std::endl;
    
    // 插入元素,自动扩容
    myset.insert(6);
    
    // 根据负载因子重新分配桶
    myset.rehash(6);
    
    return 0;
}

输出:

Current max_load_factor is 1
New max_load_factor is 0.5
注意事项
  • max_load_factor() 返回的值是一个浮点数,表示当前的最大负载因子。当设置最大负载因子时,也需要传入一个浮点数。
  • 如果不设置最大负载因子,则使用默认值 1.0。
  • 在插入元素时,如果当前 unordered_set 的负载因子超过了最大负载因子,那么 unordered_set 将自动扩容,重新分配桶的数量。
  • 在重复调用 max_load_factor() 时,如果新的最大负载因子小于等于当前的负载因子,则不会使 unordered_set 重新分配桶的数量,而是当下一次插入元素时根据负载因子重新分配桶的数量。如果新的最大负载因子大于当前的负载因子,则 unordered_set 会根据新的最大负载因子重新分配桶的数量。