C++ unordered_multimap::reserve() 函式



C++ 的std::unordered_multimap::reserve()函式用於將容器中的桶數量設定為最適合容納至少n個元素且不超過最大負載因子的數量,並對容器進行重新雜湊。

如果n大於當前bucket_count() * max_load_factor(),則容器的桶數量會增加並強制重新雜湊;類似地,如果n小於該值,則該函式可能沒有效果。

語法

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

void reserve(size_type n);

引數

  • n - 它表示容器的容量。

返回值

此函式不返回任何內容。

示例 1

在以下示例中,讓我們看看unordered_multimap::reserve()函式的使用。

#include <iostream>
#include <unordered_map>
using namespace std;
int main(void) {
   unordered_multimap<char, int> umm;
   cout << "Initial bucket count = " << umm.bucket_count() << endl;
   umm.reserve(5);
   cout << "Bucket count after reserve = "
      << umm.bucket_count() << endl;
   return 0;
}

輸出

執行上述程式碼後,我們得到以下輸出,其中顯示了初始桶數和保留數 -

Initial bucket count = 1
Bucket count after reserve = 5

示例 2

考慮以下示例,我們將使用reserve()函式使桶數至少可以儲存5個元素。

#include <iostream>
#include <unordered_map>
using namespace std;
int main () {
   unordered_multimap<string, string> umMap;
   cout << "Bucket Count: " << umMap.bucket_count() << endl;
   umMap.reserve(5);
   cout << "Bucket Count after reserve(): " << umMap.bucket_count() << endl;
  
   umMap.insert({ {"Fname", "Tutorix"}, {"Fname", "tutorials"},{"Lname", "Point"}, {"Country","India"}, {"Locaton","Hyderabad"}});

   for (auto& it: umMap)
      cout << it.first << "->" << it.second << endl;
   return 0;
}

輸出

執行上述程式碼後,我們將獲得初始和保留容器中的桶數,以及容器的元素。

Bucket Count: 1
Bucket Count after reserve(): 5
Country->India
Lname->Point
Locaton->Hyderabad
Fname->tutorials
Fname->Tutorix

示例 3

讓我們看一下下面的例子,我們將顯示使用reserve()函式前後桶及其元素。

#include <iostream>
#include <unordered_map>
using namespace std;
int main () {
   unordered_multimap<string, string> umMap={{"Hyderabad", "India"}, {"Delhi", "India"}, {"Bangalore", "India"}, {"Hyderabad", "Telngana"}};
   cout<<"Unordered_multimap contains "<<umMap.bucket_count()<<" buckets:";
   for(unsigned int i = 0; i < umMap.bucket_count(); i++) {
      cout<<"\nThe bucket "<<i<<" contains: ";   
      for(auto it = umMap.begin(i); it != umMap.end(i); ++it) {
         cout<<it->first<<":"<<it->second<<" ";
	  } 
   }  

   cout<<"\nCapacity is changed using reserve function.\n";
   umMap.reserve(5);
   
   cout<<"Unordered_multimap contains "<<umMap.bucket_count()<<" buckets:";
   for(unsigned int i = 0; i < umMap.bucket_count(); i++) {
      cout<<"\nThe bucket "<<i<<" contains: ";   
      for(auto it = umMap.begin(i); it != umMap.end(i); ++it) {
         cout<<it->first<<":"<<it->second<<" ";
      } 
   }
   return 0;
}

輸出

執行上述程式碼後,我們將獲得初始和保留條件下的桶數及其元素 -

Unordered_multimap contains 5 buckets:
The bucket 0 contains: 
The bucket 1 contains: Bangalore:India 
The bucket 2 contains: 
The bucket 3 contains: Delhi:India 
The bucket 4 contains: Hyderabad:Telngana Hyderabad:India 
Capacity is changed using reserve function.
Unordered_multimap contains 5 buckets:
The bucket 0 contains: 
The bucket 1 contains: Bangalore:India 
The bucket 2 contains: 
The bucket 3 contains: Delhi:India 
The bucket 4 contains: Hyderabad:Telngana Hyderabad:India 
廣告