Namespaces
Variants

std:: unordered_multiset

From cppreference.net
Определено в заголовочном файле <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. Поиск, вставка и удаление имеют среднюю постоянную сложность по времени.

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

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

std::unordered_multiset удовлетворяет требованиям Container , AllocatorAwareContainer , UnorderedAssociativeContainer .

Все функции-члены std::unordered_multiset являются constexpr : возможно создавать и использовать объекты std::unordered_multiset при вычислении константного выражения.

Однако, объекты std::unordered_multiset обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)

Содержание

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

Типы членов

Тип Определение
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 и ConstexprIterator (начиная с C++26) к value_type
const_iterator LegacyForwardIterator и ConstexprIterator (начиная с C++26) к const value_type
local_iterator Тип итератора, категория, тип значения, разности, указателя и
ссылки которого совпадают с iterator . Этот итератор
может использоваться для обхода одной корзины, но не между корзинами
const_local_iterator Тип итератора, категория, тип значения, разности, указателя и
ссылки которого совпадают с const_iterator . Этот итератор
может использоваться для обхода одной корзины, но не между корзинами
node_type (начиная с C++17) специализация node handle , представляющая узел контейнера

Функции-члены

конструирует unordered_multiset
(публичная функция-член)
уничтожает unordered_multiset
(public member function)
присваивает значения контейнеру
(public member function)
возвращает связанный аллокатор
(публичная функция-член)
Итераторы
возвращает итератор на начало
(публичная функция-член)
возвращает итератор на конец
(публичная функция-член)
Ёмкость
проверяет, является ли контейнер пустым
(публичная функция-член)
возвращает количество элементов
(public member function)
возвращает максимально возможное количество элементов
(публичная функция-член)
Модификаторы
очищает содержимое
(публичная функция-член)
вставляет элементы или узлы (since C++17)
(публичная функция-член)
вставляет диапазон элементов
(публичная функция-член)
создаёт элемент на месте
(публичная функция-член)
создаёт элементы на месте с использованием подсказки
(публичная функция-член)
удаляет элементы
(публичная функция-член)
обменивает содержимое
(публичная функция-член)
(C++17)
извлекает узлы из контейнера
(публичная функция-член)
(C++17)
объединяет узлы из другого контейнера
(публичная функция-член)
Поиск
возвращает количество элементов, соответствующих определённому ключу
(public member function)
находит элемент с заданным ключом
(public member function)
(C++20)
проверяет, содержит ли контейнер элемент с указанным ключом
(public member function)
возвращает диапазон элементов, соответствующих определённому ключу
(публичная функция-член)
Интерфейс Bucket
возвращает итератор на начало указанной корзины
(public member function)
возвращает итератор на конец указанной корзины
(public member function)
возвращает количество сегментов
(публичная функция-член)
возвращает максимальное количество сегментов
(публичная функция-член)
возвращает количество элементов в определённом сегменте
(публичная функция-член)
возвращает сегмент для указанного ключа
(публичная функция-член)
Политика хеширования
возвращает среднее количество элементов на корзину
(публичная функция-член)
управляет максимальным средним количеством элементов на сегмент
(публичная функция-член)
резервирует как минимум указанное количество сегментов и перестраивает хеш-таблицу
(публичная функция-член)
резервирует место как минимум для указанного количества элементов и регенерирует хеш-таблицу
(публичная функция-член)
Наблюдатели
возвращает функцию, используемую для хеширования ключей
(public member function)
возвращает функцию, используемую для сравнения ключей на равенство
(публичная функция-член)

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

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

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

(начиная с C++17)

Примечания

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

Макрос тестирования возможностей Значение Стандарт Возможность
__cpp_lib_containers_ranges 202202L (C++23) Конструирование и вставка диапазонов для контейнеров
__cpp_lib_constexpr_unordered_set 202502L (C++26) constexpr std::unordered_muliset

Пример

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

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

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

Смотрите также

коллекция уникальных ключей, хэшируемая по ключам
(шаблон класса)
коллекция ключей, отсортированная по ключам
(шаблон класса)
адаптирует контейнер для предоставления коллекции ключей, отсортированной по ключам
(шаблон класса)