public member function
<unordered_map>

std::unordered_map::max_load_factor

get (1)
float max_load_factor() const noexcept;
set (2)
void max_load_factor ( float z );
獲取或設定最大負載因子
第一個版本(1)返回當前 unordered_map 容器的最大負載因子。
第二個版本(2)將 z 設定為 unordered_map 容器的新最大負載因子。

負載因子是容器中元素數量(其 size)與桶數量(bucket_count)的比率。

預設情況下,unordered_map 容器具有max_load_factor1.0.

負載因子會影響雜湊表中發生衝突的機率(即兩個元素位於同一個桶中的機率)。容器使用max_load_factor作為強制增加桶數量的閾值(從而導致 rehash)。

但請注意,實現可能會對桶數量施加上限(請參閱 max_bucket_count),這可能會強制容器忽略 max_load_factor

引數

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_map::max_load_factor
#include <iostream>
#include <string>
#include <unordered_map>

int main ()
{
  std::unordered_map<std::string,std::string> mymap = {
    {"Au","gold"},
    {"Ag","Silver"},
    {"Cu","Copper"},
    {"Pt","Platinum"}
  };

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

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

  std::cout << "new max_load_factor: " << mymap.max_load_factor() << std::endl;
  std::cout << "new size: " << mymap.size() << std::endl;
  std::cout << "new bucket_count: " << mymap.bucket_count() << std::endl;
  std::cout << "new load_factor: " << mymap.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_map 容器中元素的引用都保持有效,即使在 rehash 之後也是如此。

另見