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
廣告