公有成員函式 (public member function)
<unordered_map>

std:: unordered_map ::rehash

void rehash( size_type n );
設定桶的數量
將容器中的桶數設定為 n 或更多。

如果 n 大於容器中當前的桶數 (bucket_count),則強制進行重新雜湊。新的 桶數 可以等於或大於 n

如果 n 小於容器中當前的桶數 (bucket_count),則該函式可能不會影響 桶數 並且可能不會強制進行重新雜湊。

一個 重新雜湊 是雜湊表的重建:容器中的所有元素根據其雜湊值重新排列到新的桶集中。這可能會改變容器中元素的迭代順序。

當容器的 負載因子 即將超過其 最大負載因子 時,容器會自動執行重新雜湊。

請注意,此函式將桶數作為引數。存在一個類似的函式 unordered_map::reserve,它以容器中的元素數量作為引數。

引數

n
容器雜湊表的最小桶數。
成員型別size_type是一種無符號整型型別。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// unordered_map::rehash
#include <iostream>
#include <string>
#include <unordered_map>

int main ()
{
  std::unordered_map<std::string,std::string> mymap;

  mymap.rehash(20);

  mymap["house"] = "maison";
  mymap["apple"] = "pomme";
  mymap["tree"] = "arbre";
  mymap["book"] = "livre";
  mymap["door"] = "porte";
  mymap["grapefruit"] = "pamplemousse";

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

  return 0;
}

可能的輸出
current bucket_count: 23


透過呼叫rehash (重新雜湊)透過預留一定數量的最小桶數到雜湊表中,我們可以避免容器擴充套件可能引起的多次重新雜湊。

複雜度

在重新雜湊的情況下,
平均情況:與 容器大小 線性相關。
最壞情況:與 容器大小 二次相關。

迭代器有效性

如果發生重新雜湊,所有迭代器都會失效,但指向單個元素的引用和指標仍然有效。
如果沒有實際發生重新雜湊,則無變化。

另見