Метод rehash
Метод rehash класса unordered_map
устанавливает количество корзин (buckets) в контейнере
равным заданному значению или большему. Если новое
количество корзин больше текущего, происходит
перестроение хеш-таблицы: все элементы перераспределяются
по новым корзинам. Это может быть полезно для уменьшения
количества коллизий и ускорения поиска. В первый параметр
мы передаем желаемое количество корзин. Сами элементы
при этом не удаляются и не изменяются.
Синтаксис
umap.rehash(count)
Пример
Давайте создадим unordered_map с несколькими
элементами и посмотрим на количество корзин до и
после вызова rehash:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> umap = {
{"a", 1},
{"b", 2},
{"c", 3}
};
cout << "Before: " << umap.bucket_count() << endl;
umap.rehash(20);
cout << "After: " << umap.bucket_count() << endl;
return 0;
}
Результат выполнения кода:
"Before: 13"
"After: 23"
Пример
Давайте убедимся, что после вызова rehash
все элементы контейнера сохраняются и остаются
доступными:
#include <iostream>
#include <unordered_map>
using namespace std;
int main()
{
unordered_map<string, int> umap = {
{"a", 1},
{"b", 2},
{"c", 3}
};
umap.rehash(50);
for (auto& pair : umap) {
cout << pair.first << " " << pair.second << endl;
}
return 0;
}
Результат выполнения кода:
"c 3"
"b 2"
"a 1"
Смотрите также
-
метод
reserve,
который резервирует место под заданное число элементов -
метод
bucket_count,
который возвращает количество корзин -
метод
load_factor,
который возвращает коэффициент загрузки -
класс
unordered_map,
который представляет хеш-таблицу