public member function
<unordered_map>

std::unordered_multimap::rehash

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

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

如果 n 小於容器中當前的桶數(bucket_count),該函式可能對桶數沒有影響,也可能不強制進行重雜湊。

重雜湊 是雜湊表的重建:容器中的所有元素根據其雜湊值重新排列到新的桶集中。這可能會改變容器中元素的迭代順序,但等效鍵的元素之間的相對順序會得以保留。

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

請注意,此函式期望的引數是桶的數量。存在一個類似的函式 unordered_multimap::reserve,它期望的引數是容器中元素的數量。

引數

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

返回值



示例

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

int main ()
{

  std::unordered_multimap<std::string,std::string> myumm;

  myumm.rehash(20);

  myumm.insert({{"apple","NY"},{"apple","WA"},{"peach","GA"}});
  myumm.insert({{"orange","FL"},{"cherry","UT"}});
  myumm.insert({{"strawberry","LA"},{"strawberry","NC"}});

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

  return 0;
}

可能的輸出
current bucket_count: 23


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

複雜度

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

迭代器有效性

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

另見