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通过预留一定数量的最小桶数到哈希表中,我们可以避免容器扩展可能引起的多次重新散列。

复杂度

在重新哈希的情况下,
平均情况:与容器大小成线性关系。
最坏情况:与容器大小成二次方关系。

迭代器有效性

如果发生重新哈希,所有迭代器都会失效,但指向单个元素的引用和指针仍然有效。
等效元素的迭代相对顺序得以保留。
如果没有实际发生重新哈希,则无变化。

另见