unordered_map reserve () в C ++ STL

Опубликовано: 30 Декабря, 2021


Как мы знаем, Bucket - это слот во внутренней хэш-таблице контейнера, которому назначаются все элементы на основе хэш-значения их ключа. Сегменты пронумерованы от 0 до bucket_count. Теперь в ведре хранится переменный номер элемента. Это число основано на термине « коэффициент загрузки». Когда коэффициент загрузки (load_factor) достигает определенного порога, контейнер увеличивает количество сегментов и повторно хеширует карту, но когда мы вызываем rehash (n), он напрямую устанавливает количество сегментов. до n и запускает перестроение всей хеш-таблицы. Но когда мы вызываем функцию Reserve (n), тогда создается достаточно Buckets для хранения как минимум n элементов. Если затем мы добавляем на карту> n элементов, может быть запущено повторное хеширование в зависимости от коэффициент загрузки. Вызывая резерв с размером, который мы ожидали для контейнера unordered_map, мы избегали многократных повторных хеширования, которые могли быть вызваны увеличением размера контейнера, и оптимизировали размер хеш-таблицы. Функция C ++ std :: unordered_map :: reserve () устанавливает количество сегментов в контейнере (bucket_count) как наиболее подходящее, чтобы содержать не менее n элементов.

Синтаксис:

 unordered_map_name .reserve (N)

Параметры: функция принимает единственный обязательный параметр N, который указывает количество запрошенных элементов в качестве минимальной емкости.

Возвращаемое значение: функция ничего не возвращает.

Ниже приведены программы, иллюстрирующие вышеуказанную функцию:

Программа 1:

// C++ program to illustrate the
// unordered_map::reserve()
#include <bits/stdc++.h>
using namespace std;
int main()
{
// declaration
unordered_map< int , int > sample1, sample2;
// the sample1 size is reserved for
// the bucket to contain a minimum of
// one elements
sample1.reserve(1);
// inserts key and element
// in sample1
sample1.insert({ 10, 100 });
sample1.insert({ 50, 500 });
// inserts key and element
// in sample1
// the sample1 size is reserved for
// the bucket to contain a minimum of
// three elements
sample2.reserve(3);
sample2.insert({ 20, 200 });
sample2.insert({ 30, 300 });
sample2.insert({ 30, 150 });
cout << "The size of Sample1 is: " << sample1.size();
cout << " Key and Elements of Sample1 are:" ;
for ( auto it = sample1.begin(); it != sample1.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} " ;
}
cout << " The size of Sample2 is: " << sample2.size();
cout << " Key and Elements of Sample2 are:" ;
for ( auto it = sample2.begin(); it != sample2.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} " ;
}
return 0;
}
Выход:
Размер Sample1: 2
Ключевые и элементы Sample1: {50, 500} {10, 100} 

Размер Sample2: 2
Ключевые и элементы Sample2: {30, 300} {20, 200}

Программа 2:

// C++ program to illustrate the
// unordered_map::reserve()
#include <bits/stdc++.h>
using namespace std;
int main()
{
// declaration
unordered_map< char , char > sample1, sample2;
// the sample1 size is reserved for
// the bucket to contain a minimum of
// one elements
sample1.reserve(1);
// inserts key and element
// in sample1
sample1.insert({ 'a' , 'A' });
sample1.insert({ 'g' , 'G' });
// inserts key and element
// in sample1
// the sample1 size is reserved for
// the bucket to contain a minimum of
// three elements
sample2.reserve(3);
sample2.insert({ 'b' , 'B' });
sample2.insert({ 'c' , 'C' });
sample2.insert({ 'd' , 'D' });
cout << "The size of Sample1 is: " << sample1.size();
cout << " Key and Elements of Sample1 are:" ;
for ( auto it = sample1.begin(); it != sample1.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} " ;
}
cout << " The size of Sample2 is: " << sample2.size();
cout << " Key and Elements of Sample2 are:" ;
for ( auto it = sample2.begin(); it != sample2.end(); it++) {
cout << "{" << it->first << ", " << it->second << "} " ;
}
return 0;
}
Выход:
Размер Sample1: 2
Ключевые и элементы Sample1: {g, G} {a, A} 

Размер Sample2: 3
Ключевые и элементы Sample2: {d, D} {c, C} {b, B}
Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .