std::
unordered_multiset::rehash
公众成员函数 <unordered_set>
void rehash ( size_type n );
设置存储桶数
设置容器中的桶数为
n或更多。
如果
n小于当前容器的桶数(bucket_count),则该函数可能对桶数没有影响,也不会强制进行
rehash。
如果
n大于容器中当前的桶数(bucket_count),则强制
rehash。新的桶数可以大于等于
n。
rehash是哈希表的重构:容器中的所有元素都根据它们的哈希值重新排列到新的
bucket集合中。
这可能会改变容器内元素的迭代顺序。
每当容器的负载系数在操作中超过它的
max_load_factor时,容器就会自动执行
rehash。
注意,这个函数将存储桶的数量作为参数。
还有一个类似的函数
unordered_multiset::reserve,它将容器中元素的数量作为参数。
☲ 参数
-
n
-
容器哈希表的最小桶数。
size_type是一种无符号整型。
☉ 返回值
返回当前的负载系数
☣ 示例
// 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来在哈希表中保留一定数量的最小桶,可以避免容器扩展可能导致的多次哈希。
✥ 复杂度
在发生rehash的情况下,一般:容器大小呈线性.最坏情况:容器大小的二次方。
☣ 迭代器的有效性
如果发生rehash,所有的迭代器都失效,但是对单个元素的引用和指针仍然有效。
如果没有实际的rehash,则不会发生任何更改。
🍄 另请参阅
unordered_multiset::bucket_count |
返回存储桶的数量(公众成员函数) |
unordered_multiset::size |
返回容量(公众成员函数) |
unordered_multiset::reserve |
重组存储桶(公众成员函数) |
unordered_multiset::max_load_factor |
获取最大负载系数(公众成员函数) |