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