C++ unordered_multimap::rehash() 函式



C++ 的std::unordered_multimap::rehash()函式用於將容器中的桶數設定為n或更多。重新雜湊是雜湊表的重建;根據其新的雜湊值,所有元素都將重新排列到新的桶集合中。當容器的負載因子即將超過其max_load_factor時,容器會自動執行重新雜湊。

如果n大於容器中當前的桶數,則會發生重新雜湊;同樣,如果n小於容器中當前的桶數,則該函式可能對桶計數沒有影響,並且可能不會強制重新雜湊。

語法

以下是std::unordered_multimap::rehash()函式的語法。

void rehash(size_type n);

引數

  • n − 表示請求的桶數。

返回值

此函式不返回任何值。

示例1

在下面的示例中,讓我們看看unordered_multimap::rehash()函式的用法。

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

輸出

如果我們執行上面的程式碼,它將生成以下輸出:

Initial bucket_count: 1
Current bucket_count: 23

示例2

考慮下面的示例,我們將計算使用rehash()函式之前和之後的大小和桶數。

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

輸出

以下是上述程式碼的輸出:

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

示例3

讓我們看看下面的示例,我們將使用rehash()函式來設定容器中的桶數。

#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
   unordered_multimap<int, int> umMap;
   umMap = { {1, 100}, {2, 20}, {3, 30}, {2, 20}, {1, 10} };
   cout << "Size of container : " << umMap.size() << endl;
   cout << "Initial bucket count : " << umMap.bucket_count() << endl;
   
   umMap.rehash(10);
   cout << "Size of container : " << umMap.size() << endl;
   cout << "current bucket count is : " << umMap.bucket_count() << endl;
   for(unsigned int i = 0; i < umMap.bucket_count(); i++){
      cout<<"The bucket #"<<i <<endl;
   }
   return 0;
}

輸出

上述程式碼的輸出如下:

Size of container : 5
Initial bucket count : 5
Size of container : 5
current bucket count is : 11
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
廣告