Home C&C++函数库 c++ 语法 程序源码 Linux C库

std::

unordered_multimap::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_multimap::reserve,它将容器中元素的数量作为参数。

☲  参数


n
容器哈希表的最小桶数。
size_type是一种无符号整型。

☉  返回值



返回当前的负载系数

☣  示例



// 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来在哈希表中保留一定数量的最小桶,可以避免容器扩展可能导致的多次哈希。

✥ 复杂度



一般情况:容器大小呈线性.最坏情况:容器大小的二次方。

☣ 迭代器的有效性



如果发生rehash,所有的迭代器都失效,但是对单个元素的引用和指针仍然有效。 如果没有实际的rehash,则不会发生任何更改。

🍄  另请参阅



unordered_multimap::bucket_count 返回存储桶的数量(公众成员函数)
unordered_multimap::size 返回容量(公众成员函数)
unordered_multimap::reserve 重组存储桶(公众成员函数)
unordered_multimap::max_load_factor 获取最大负载系数(公众成员函数)

联系我们 免责声明 关于CandCplus 网站地图