◐ Shell
clean mode source ↗

std::unordered_multiset — cppreference.com

<tbody> </tbody>

Определено в заголовочном файле <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 соответствует требованиям Container, AllocatorAwareContainer, UnorderedAssociativeContainer.

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

Типы-элементы

Тип-элемент Определение
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 Constant LegacyForwardIterator в value_type [править]
const_iterator LegacyForwardIterator в const value_type [править]
local_iterator Тип итератора, category, value, difference, pointer и
ссылочные типы которого совпадают с типами iterator. Этот итератор
можно использовать для итерации по одному сегменту, но не по сегментам.[править]
const_local_iterator Тип итератора, category, value, difference, pointer и
ссылочные типы которого совпадают с типами const_iterator. Этот итератор можно использовать для итерации по одному сегменту, но не по сегментам.[править]
node_type (начиная с C++17) специализация дескриптора узла, представляющая узел контейнера [править]

Функции-элементы

создаёт unordered_multiset
(public функция-элемент) [править]
уничтожает unordered_multiset
(public функция-элемент) [править]

(C++11)

присваивает значения контейнеру
(public функция-элемент) [править]
возвращает связанный аллокатор
(public функция-элемент) [править]
Итераторы
возвращает итератор на начало
(public функция-элемент) [править]

(C++11)

возвращает итератор на конец
(public функция-элемент) [править]
Ёмкость

(C++11)

проверяет, пуст ли контейнер
(public функция-элемент) [править]

(C++11)

возвращает количество элементов
(public функция-элемент) [править]

(C++11)

возвращает максимально возможное количество элементов
(public функция-элемент) [править]
Модификаторы

(C++11)

очищает содержимое
(public функция-элемент) [править]

(C++11)

вставляет элементы или узлы (начиная с C++17)
(public функция-элемент) [править]
вставляет ряд элементов
(public функция-элемент) [править]

(C++11)

создаёт элемент на месте
(public функция-элемент) [править]
создаёт элементы на месте, используя подсказку
(public функция-элемент) [править]

(C++11)

удаляет элементы
(public функция-элемент) [править]

(C++11)

обменивает содержимое
(public функция-элемент) [править]

(C++17)

извлекает узлы из контейнера
(public функция-элемент) [править]

(C++17)

сливает с узлами из другого контейнера
(public функция-элемент) [править]
Поиск

(C++11)

возвращает количество элементов, соответствующих определённому ключу
(public функция-элемент) [править]

(C++11)

ищет элемент с определённым ключом
(public функция-элемент) [править]
возвращает диапазон элементов, соответствующих определённому ключу
(public функция-элемент) [править]
Интерфейс сегментов
возвращает итератор на начало указанного сегмента
(public функция-элемент) [править]
возвращает итератор на конец указанного сегмента
(public функция-элемент) [править]
возвращает количество сегментов
(public функция-элемент) [править]
возвращает максимальное количество сегментов
(public функция-элемент) [править]
возвращает количество элементов в конкретном сегменте
(public функция-элемент) [править]

(C++11)

возвращает сегмент для конкретного ключа
(public функция-элемент) [править]
Политика хеширования
возвращает среднее количество элементов на сегмент
(public функция-элемент) [править]
управляет максимальным средним количеством элементов на сегмент
(public функция-элемент) [править]

(C++11)

резервирует как минимум указанное количество сегментов и регенерирует хеш-таблицу
(public функция-элемент) [править]

(C++11)

резервирует место по крайней мере для указанного количества элементов и регенерирует хеш-таблицу
(public функция-элемент) [править]
Наблюдатели
возвращает функцию, используемую для хэширования ключей
(public функция-элемент) [править]

(C++11)

возвращает функцию, используемую для сравнения ключей на равенство
(public функция-элемент) [править]

Функции, не являющиеся элементами

Примечание

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

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

Пример

Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

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