C++ unordered_set::rehash() 函式



C++ 的std::unordered_set::rehash() 函式用於將 unordered_set 容器中的桶數設定為 n 或更多。重新雜湊是雜湊表的重建;所有元素都根據其新的雜湊值重新排列到新的桶集中。

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

語法

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

void rehash ( size_type n );

引數

  • n - 它表示桶的最小數量。

返回值

此函式不返回任何內容。

示例 1

讓我們看一下下面的示例,我們將演示 unordered_set::rehash() 函式的使用。

#include <iostream>
#include <string>
#include <unordered_set>

int main () {
   std::unordered_set<std::string> myset;

   myset.rehash(12);

   myset.insert("android");
   myset.insert("java");
   myset.insert("html");
   myset.insert("css");
   myset.insert("javascript");

   std::cout << "current bucket_count: " << myset.bucket_count() << std::endl;

   return 0;
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果:

current bucket_count: 13

示例 2

考慮以下示例,我們將考慮為空的 unordered_set,該集合為空,並在使用 unordered_set::rehash() 函式後顯示其初始桶計數和當前桶計數。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<string> uSet;
   cout<<"Initial bucket count: "<<uSet.bucket_count()<<endl;
   uSet.rehash(10);
   cout << "current bucket_count: " << uSet.bucket_count() << endl;
   return 0;
}

輸出

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

Initial bucket count: 1
current bucket_count: 11

示例 3

讓我們看一下 unordered_set::rehash() 函式用法的另一個示例,並顯示使用函式前後計數。

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main () {
   unordered_set<int> uSet = {1, 2, 3, 4, 5};
   cout<<"Initial bucket count: "<<uSet.bucket_count()<<endl;
   uSet.rehash(15);
   cout << "current bucket_count: " << uSet.bucket_count() << endl;
   return 0;
}

輸出

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

Initial bucket count: 13
current bucket_count: 17

示例 4

以下是一個示例,我們將使用 unordered_set::rehash() 函式設定桶數,並顯示桶數。

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
   unordered_set<int> uSet;
   uSet = { 2, 4, 6, 8 };
   cout << "Size of unorder_set container : " << uSet.size() << endl;
   cout << "Initial bucket count : " << uSet.bucket_count() << endl;
   
   uSet.rehash(12);
   cout << "Size of unorder_set container : " << uSet.size() << endl;
   cout << "current bucket count is : " << uSet.bucket_count() << endl;
   for(unsigned int i = 0; i < uSet.bucket_count(); i++){
      cout<<"The bucket #"<<i <<endl;
   }
   return 0;
}

輸出

上述程式碼的輸出如下:

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

© . All rights reserved.