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

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 获取最大负载系数(公众成员函数)

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