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 соответствует требованиям Container, AllocatorAwareContainer, UnorderedAssociativeContainer.

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

Однако объявление переменной std::unordered_multiset со спецификатором constexpr обычно приводит к ошибке, поскольку вычисление константного выражения требует освободить всё динамически выделенное хранилище в рамках того же вычисления, чего обычно не происходит при инициализации std::unordered_multiset.

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

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

(constructor)
создаёт unordered_multiset
(открытая функция-член)
(destructor)
уничтожает 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 в качестве типа параметра.

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

Пример

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

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

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

См. также

unordered_set
(C++11)
набор уникальных ключей, хешируемых по ключам
(шаблон класса)
multiset
набор ключей, отсортированных по ключам
(шаблон класса)
flat_multiset
(C++23)
адаптирует контейнер для предоставления набора ключей, отсортированных по ключам
(шаблон класса)

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

Spec-Zone.ru

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