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