C++ unordered_map::rehash() 函数



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

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

语法

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

void rehash(size_type n);

参数

  • n − 它指示新的桶数。

返回值

此函数不返回任何值。

示例 1

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

#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。

#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()函数来设置容器中的桶数。

#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
广告
© . All rights reserved.