Spec-Zone.ru › C++

std::unordered_multiset

Определено в заголовке <unordered_set>
template<
    class Key,
    class Hash = std::hash<Key>,
    class KeyEqual = std::equal_to<Key>,
    class Allocator = std::allocator<Key>
> class unordered_multiset;
(1) (с C++11)
namespace pmr {
    template<
        class Key,
        class Hash = std::hash<Key>,
        class Pred = std::equal_to<Key>
    > using unordered_multiset = std::unordered_multiset<Key, Hash, Pred,
                                     std::pmr::polymorphic_allocator<Key>>;
}
(2) (с C++17)

std::unordered_multiset — это ассоциативный контейнер, содержащий набор, возможно, не уникальных объектов типа Key. Поиск, вставка и удаление имеют среднее время выполнения порядка константы.

Внутренне элементы не отсортированы в каком-либо определенном порядке, но организованы в ведра. Ведро, в которое попадает элемент, полностью зависит от хеша его значения. Это позволяет быстро получить доступ к отдельным элементам, поскольку после вычисления хеша можно определить точное ведро, в котором находится элемент.

Порядок итерации в этом контейнере не требуется стабильным (например, std::equal нельзя использовать для сравнения двух std::unordered_multiset), за исключением того, что каждая группа элементов, ключи которых сравниваются как эквивалентные (сравниваются как равные с использованием key_eq() в качестве компаратора), образует непрерывный поддиапазон в порядке итерации, также доступный с помощью equal_range().

std::unordered_multiset соответствует требованиям Контейнера, Контейнера с поддержкой аллокатора, Неупорядоченного ассоциативного контейнера.

Параметры шаблона

Типы членов

Тип члена Определение
key_type Key
value_type Key
size_type Целый тип без знака (обычно std::size_t)
difference_type Целый тип со знаком (обычно std::ptrdiff_t)
hasher Hash
key_equal KeyEqual
allocator_type Allocator
reference value_type&
const_reference const value_type&
pointer std::allocator_traits<Allocator>::pointer
const_pointer std::allocator_traits<Allocator>::const_pointer
iterator Постоянный LegacyForwardIterator для value_type
const_iterator LegacyForwardIterator для const value_type
local_iterator Тип итератора, категория, значения, разницы, указатели и
типы ссылок которого совпадают с iterator. Эта итерация
может использоваться для итерации по одному ведру, но не по всем ведрам
const_local_iterator Тип итератора, категория, значения, разницы, указатели и
типы ссылок которого совпадают с const_iterator. Эта итерация
может использоваться для итерации по одному ведру, но не по всем ведрам
node_type (с C++17) Специализация обработчика узла, представляющая узел контейнера

Члены-функции

(конструктор)
создаёт unordered_multiset
(публичный член-функция)
(деструктор)
уничтожает unordered_multiset
(публичный член-функция)
operator=
присваивает значения контейнеру
(публичный член-функция)
get_allocator
возвращает связанный аллокатор
(публичный член-функция)
Итераторы
begincbegin
возвращает итератор к началу
(публичный член-функция)
endcend
возвращает итератор к концу
(публичный член-функция)
Ёмкость
empty
проверяет, пуст ли контейнер
(публичный член-функция)
size
возвращает количество элементов
(публичный член-функция)
max_size
возвращает максимальное возможное количество элементов
(публичный член-функция)
Модификаторы
clear
очищает содержимое
(публичный член-функция)
insert
вставляет элементы или узлы(с C++17)
(публичный член-функция)
insert_range
(C++23)
вставляет диапазон элементов
(публичный член-функция)
emplace
создаёт элемент на месте
(публичный член-функция)
emplace_hint
создаёт элементы на месте с подсказкой
(публичный член-функция)
erase
удаляет элементы
(публичный член-функция)
swap
меняет местами содержимое
(публичный член-функция)
extract
(C++17)
извлекает узлы из контейнера
(публичный член-функция)
merge
(C++17)
объединяет узлы из другого контейнера
(публичный член-функция)
Поиск
count
возвращает количество элементов, соответствующих заданному ключу
(публичный член-функция)
find
находит элемент с заданным ключом
(публичный член-функция)
contains
(C++20)
проверяет, содержит ли контейнер элемент с заданным ключом
(публичный член-функция)
equal_range
возвращает диапазон элементов, соответствующих заданному ключу
(публичный член-функция)
Интерфейс ведёр
begin(size_type)cbegin(size_type)
возвращает итератор к началу указанного ведра
(публичный член-функция)
end(size_type)cend(size_type)
возвращает итератор к концу указанного ведра
(публичный член-функция)
bucket_count
возвращает количество ведёр
(публичный член-функция)
max_bucket_count
возвращает максимальное количество ведёр
(публичный член-функция)
bucket_size
возвращает количество элементов в указанном ведре
(публичный член-функция)
bucket
возвращает ведро для указанного ключа
(публичный член-функция)
Политика хэширования
load_factor
возвращает среднее количество элементов на ведро
(публичный член-функция)
max_load_factor
управляет максимальным средним количеством элементов на ведро
(публичный член-функция)
rehash
резервирует не менее указанного количества ведёр и перестраивает хеш-таблицу
(публичный член-функция)
reserve
резервирует место для не менее указанного количества элементов и перестраивает хеш-таблицу
(публичный член-функция)
Наблюдатели
hash_function
возвращает функцию, используемую для хэширования ключей
(публичный член-функция)
key_eq
возвращает функцию, используемую для сравнения ключей на равенство
(публичный член-функция)

Нечленённые функции

operator==operator!=
(C++11)(C++11)(удалено в C++20)
сравнивает значения в unordered_multiset
(шаблон функции)
std::swap(std::unordered_multiset)
(C++11)
специализирует алгоритм std::swap
(шаблон функции)
erase_if(std::unordered_multiset)
(C++20)
удаляет все элементы, удовлетворяющие определённым критериям
(шаблон функции)

Руководства по выводу типов

(с C++17)

Примечания

Типы-члены iterator и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегруженных функций с использованием этих двух типов в качестве типов параметров может нарушить правило одной реализации. Поскольку iterator можно преобразовать в const_iterator, вместо этого можно использовать одну функцию с const_iterator в качестве типа параметра.

Макрос проверки наличия функции Значение Std Функция
__cpp_lib_containers_ranges 202202L (C++23) Создание и вставка диапазонов для контейнеров

Пример

Отчёты об ошибках

Следующие отчёты об ошибках, меняющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применено к Поведение при публикации Правильное поведение
LWG 2050 C++11 определения reference, const_reference, pointer
и const_pointer основывались на allocator_type
основано на value_type и
std::allocator_traits

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/unordered_multiset

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API