![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
The Data StructureBoost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 41. Boost.Unordered
|
метод |
Описание |
---|---|
<size_typebucket_count()const > |
Количество ведер. |
<size_typemax_bucket_count()
const > |
Верхняя граница по количеству ведер. |
<size_typebucket_size(size_typen)const > |
Количество элементов в ведре<n >. |
<size_typebucket(key_typeconst&k)const > |
возвращает индекс ведра, который будет содержать k |
<local_iterator
begin(size_typen); > |
Return begin and end iterators for bucket
n . |
<local_iterator
end(size_typen); > | |
<const_local_iterator
begin(size_typen)const; > | |
<const_local_iteratorend(size_typen)const; > | |
<const_local_iterator
cbegin(size_typen)const; > | |
<const_local_iteratorcend(size_typen)const; > |
По мере добавления большего количества элементов в неупорядоченный ассоциативный контейнер количество элементов в ведрах будет увеличиваться, вызывая ухудшение производительности. Для борьбы с этим контейнеры увеличивают количество ведра по мере вставки элементов. Вы также можете сказать контейнеру изменить счет ведра (если требуется), позвонив<rehash
>.
Стандарт оставляет большую свободу для исполнителя, чтобы решить, как количество ведер выбрано, но он делает некоторые требования, основанные на «факторе нагрузки» контейнера, среднем количестве элементов на ведро. Контейнеры также имеют «максимальный коэффициент нагрузки», который они должны стараться поддерживать ниже.
Вы не можете контролировать количество ведра напрямую, но есть два способа повлиять на него:
rehash
>.max_load_factor
>.<max_load_factor
>не позволяет установить максимальный коэффициент нагрузки самостоятельно, он просто позволяет датьподсказку. И даже в этом случае проект стандарта не требует от контейнера особого внимания к этому значению. Единственный раз, когда коэффициент нагрузкитребуется, чтобы быть меньше максимального, после вызова<rehash
>. Но большинство реализаций будут стараться удерживать количество элементов ниже максимального коэффициента нагрузки и устанавливать максимальный коэффициент нагрузки таким же, как и или близкий к подсказке, если только подсказка не является необоснованно маленькой или большой.
Table 41.2. Methods for Controlling Bucket Size
метод |
Описание |
---|---|
< |
Постройте пустой контейнер с ведрами не менее< |
< |
Постройте пустой контейнер с по меньшей мере< |
< |
Среднее количество элементов на ведро. |
< |
Возвращает текущий максимальный коэффициент нагрузки. |
< |
Изменяет максимальный коэффициент загрузки контейнера, используя< |
< |
Изменяет количество ведер так, чтобы там было хотя бы n ведер, и так, чтобы коэффициент нагрузки был меньше максимального коэффициента нагрузки. |
Не уточняется, каким образом функции члена, отличные от<rehash
>, влияют на количество ковшов, хотя<insert
>разрешается обесценивать итераторы только тогда, когда вставка приводит к тому, что коэффициент нагрузки превышает или равен максимальному коэффициенту нагрузки. Для большинства реализаций это означает, что вставка изменит только количество ведер, когда это произойдет. Несмотря на то, что итераторы могут быть признаны недействительными по вызовам<insert
>и<rehash
>, указатели и ссылки на элементы контейнера никогда не признаются недействительными.
Аналогично использованию<reserve
>для<vector
>s, может быть хорошей идеей позвонить<rehash
>, прежде чем вставлять большое количество элементов. Это приведет к дорогостоящей перетасовке и позволит вам хранить итераторы, зная, что они не будут признаны недействительными. Если вы вставляете<n
>элементов в контейнер<x
>, вы можете сначала позвонить:
x.rehash((x.size() + n) / x.max_load_factor() + 1);
Статья The Data Structure раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 41. Boost.Unordered может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 41. Boost.Unordered ::
реклама |