unordered_map reserve () в C ++ STL
Как мы знаем, 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}