public member function
<unordered_map>

std::unordered_multimap::max_load_factor

get (1)
float max_load_factor() const noexcept;
set (2)
void max_load_factor ( float z );
获取或设置最大负载因子
第一个重载版本(1)返回当前 `unordered_multimap` 容器的最大负载因子。
第二个重载版本(2)将 `z` 设置为 `unordered_multimap` 容器新的最大负载因子。

负载因子是容器中元素数量(其 size)与桶数量(bucket_count)的比率。

默认情况下,`unordered_multimap` 容器具有max_load_factor1.0.

负载因子会影响哈希表中发生冲突的概率(即两个元素位于同一个桶中的概率)。容器使用max_load_factor的值作为阈值,该阈值会强制增加桶的数量(从而导致 rehash)。

参数

z
新的最大负载因子

返回值

当前的负载因子(仅针对第一个重载版本)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// unordered_multimap::max_load_factor
#include <iostream>
#include <string>
#include <unordered_map>

int main ()
{
  std::unordered_multimap<std::string,std::string> myumm = {
    {"apple","NY"},
    {"apple","WA"},
    {"peach","GA"},
    {"cherry","UT"}
  };

  std::cout << "current max_load_factor: " << myumm.max_load_factor() << std::endl;
  std::cout << "current size: " << myumm.size() << std::endl;
  std::cout << "current bucket_count: " << myumm.bucket_count() << std::endl;
  std::cout << "current load_factor: " << myumm.load_factor() << std::endl;

  float z = myumm.max_load_factor();
  myumm.max_load_factor ( z / 2.0 );
  std::cout << "[max_load_factor halved]" << std::endl;

  std::cout << "new max_load_factor: " << myumm.max_load_factor() << std::endl;
  std::cout << "new size: " << myumm.size() << std::endl;
  std::cout << "new bucket_count: " << myumm.bucket_count() << std::endl;
  std::cout << "new load_factor: " << myumm.load_factor() << std::endl;

  return 0;
}

可能的输出
current max_load_factor: 1
current size: 4
current bucket_count: 5
current load_factor: 0.8
[max_load_factor halved]
new max_load_factor: 0.5
new size: 4
new bucket_count: 11
new load_factor: 0.363636


复杂度

常量。
可能会触发 rehash(未包含)。

迭代器有效性

无变化,除非此值更改强制触发了 rehash。在这种情况下,容器中的所有迭代器都将失效。

如果新的容器 max_load_factor 设置得低于当前的 load_factor,则会强制进行 rehash。

在所有情况下,`unordered_multimap` 容器中元素的引用都保持有效,即使在 rehash 之后也是如此。

另见