public member function
<unordered_set>

std::unordered_multiset::rehash

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

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

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

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

當容器的 load factor 在操作中即將超過其 max_load_factor 時,容器會自動執行 rehash。

請注意,此函式期望的引數是桶的數量。存在一個類似的函式 unordered_multiset::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
// unordered_multiset::rehash
#include <iostream>
#include <string>
#include <unordered_set>

int main ()
{
  std::unordered_multiset<std::string> myums;

  myums.rehash(12);

  myums.insert("red");
  myums.insert("red");
  myums.insert("blue");
  myums.insert("green");
  myums.insert("yellow");

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

  return 0;
}

可能的輸出
current bucket_count: 13


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

複雜度

在重新雜湊的情況下,
平均情況:線性的(相對於 container size)。
最壞情況:二次的(相對於 container size)。

迭代器有效性

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

另見