C++ unordered_map::rehash() 函数



C++ 的std::unordered_map::rehash()函数用于将容器中的桶数设置为n或更多。重新哈希是哈希表的重建;根据它们新的哈希值,所有元素都重新排列到新的桶集中。

如果n大于容器中当前的桶数,则会发生重新哈希;类似地,如果n小于容器中当前的桶数,则该函数可能对桶计数没有影响,并且可能不会强制重新哈希。

语法

以下是std::unordered_map::rehash()函数的语法。

void rehash(size_type n);

参数

  • n − 它指示新的桶数。

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

返回值

此函数不返回任何值。

示例 1

在下面的示例中,让我们看看rehash()函数的用法。

Open Compiler
#include <iostream> #include <unordered_map> using namespace std; int main (void) { unordered_map<char, int> uMap; cout << "Initial bucket_count: " << uMap.bucket_count() << endl; uMap.rehash(20); cout << "Current bucket_count: " << uMap.bucket_count() << endl; return 0; }

输出

让我们编译并运行上述程序,这将产生以下结果:

Initial bucket_count: 1
Current bucket_count: 23

示例 2

考虑以下示例,我们将计算使用rehash()函数之前和之后的size和bucket count。

Open Compiler
#include <iostream> #include <unordered_map> using namespace std; int main (void) { unordered_map<int, int> uMap={{3, 30}, {2, 20}, {1, 10}}; cout << "Size of container before use of rehash: "<<uMap.size() << endl; cout << "Initial bucket_count: " << uMap.bucket_count() << endl; uMap.rehash(22); cout << "Size of container after use of rehash: "<<uMap.size() << endl; cout << "Current bucket_count: " << uMap.bucket_count() << endl; return 0; }

输出

以下是上述代码的输出:

Size of container before use of rehash: 3
Initial bucket_count: 13
Size of container after use of rehash: 3
Current bucket_count: 23

示例 3

让我们看下面的例子,我们将存储整型类型的键值对,并使用rehash()函数来设置容器中的桶数。

Open Compiler
#include <iostream> #include <unordered_map> using namespace std; int main() { unordered_map<int, int> uMap; uMap = { { 2, 2 }, { 3, 4 }, { 4, 6 }, { 5, 8 } }; cout << "Size of container : " << uMap.size() << endl; cout << "Initial bucket count : " << uMap.bucket_count() << endl; uMap.rehash(15); cout << "Size of container : " << uMap.size() << endl; cout << "current bucket count is : " << uMap.bucket_count() << endl; for(unsigned int i = 0; i < uMap.bucket_count(); i++){ cout<<"The bucket #"<<i <<endl; } return 0; }

输出

上述代码的输出如下:

Size of container : 4
Initial bucket count : 5
Size of container : 4
current bucket count is : 17
The bucket #0
The bucket #1
The bucket #2
The bucket #3
The bucket #4
The bucket #5
The bucket #6
The bucket #7
The bucket #8
The bucket #9
The bucket #10
The bucket #11
The bucket #12
The bucket #13
The bucket #14
The bucket #15
The bucket #16
广告