std::unordered_multimap
Определён в заголовочном файле <unordered_map> | ||
|---|---|---|
template<
class Key,
class T,
class Hash = std::hash<Key>,
class KeyEqual = std::equal_to<Key>,
class Allocator = std::allocator<std::pair<const Key, T>>
> class unordered_multimap;
| (1) | (начиная с C++11) |
namespace pmr {
template<
class Key,
class T,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>
> using unordered_multimap =
std::unordered_multimap<Key, T, Hash, Pred,
std::pmr::polymorphic_allocator<std::pair<const Key, T>>>;
}
| (2) | (начиная с C++17) |
std::unordered_multimap — это неупорядоченный ассоциативный контейнер, поддерживающий эквивалентные ключи (unordered_multimap может содержать несколько копий каждого значения ключа) и связывающий ключи со значениями другого типа. Класс unordered_multimap поддерживает прямые итераторы. Поиск, вставка и удаление имеют среднюю константную сложность.
Внутри элементы не упорядочены каким-либо определённым образом, а организованы в корзины. Корзина, в которую помещается элемент, полностью зависит от хеша его ключа. Это обеспечивает быстрый доступ к отдельным элементам: после вычисления хеша он указывает на конкретную корзину, в которую помещён элемент.
Порядок обхода этого контейнера не обязан быть стабильным (поэтому, например, std::equal нельзя использовать для сравнения двух std::unordered_multimap), за исключением того, что каждая группа элементов, ключи которых сравниваются как эквивалентные (сравниваются как равные с помощью key_eq() в качестве компаратора), образует непрерывный поддиапазон в порядке обхода, доступный также с помощью equal_range().
std::unordered_multimap удовлетворяет требованиям Container, AllocatorAwareContainer, UnorderedAssociativeContainer.
| Все функции-члены Однако объявление переменной constexpr | (начиная с C++26) |
Параметры шаблона
Типы-члены
| Тип | Определение |
|---|---|
key_type |
Key |
mapped_type |
T |
value_type | std::pair<constKey,T> |
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) | специализация дескриптора узла, представляющая узел контейнера |
Функции-члены
создаёт unordered_multimap (открытая функция-член) |
|
уничтожает unordered_multimap (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
|
| возвращает связанный аллокатор (открытая функция-член) |
|
Итераторы |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает итератор на конец (открытая функция-член) |
|
Ёмкость |
|
| проверяет, пуст ли контейнер (открытая функция-член) |
|
| возвращает количество элементов (открытая функция-член) |
|
| возвращает максимально возможное количество элементов (открытая функция-член) |
|
Модификаторы |
|
| очищает содержимое (открытая функция-член) |
|
| вставляет элементы или узлы(начиная с C++17) (открытая функция-член) |
|
|
(C++23) | вставляет диапазон элементов (открытая функция-член) |
| создаёт элемент на месте (открытая функция-член) |
|
| создаёт элементы на месте, используя подсказку (открытая функция-член) |
|
| удаляет элементы (открытая функция-член) |
|
| меняет содержимое местами (открытая функция-член) |
|
|
(C++17) | извлекает узлы из контейнера (открытая функция-член) |
|
(C++17) | перемещает узлы из другого контейнера (открытая функция-член) |
Поиск |
|
| возвращает количество элементов с заданным ключом (открытая функция-член) |
|
| находит элемент с заданным ключом (открытая функция-член) |
|
|
(C++20) | проверяет, содержит ли контейнер элемент с заданным ключом (открытая функция-член) |
| возвращает диапазон элементов с заданным ключом (открытая функция-член) |
|
Интерфейс корзин |
|
| возвращает итератор на начало указанной корзины (открытая функция-член) |
|
| возвращает итератор на конец указанной корзины (открытая функция-член) |
|
| возвращает количество корзин (открытая функция-член) |
|
| возвращает максимальное количество корзин (открытая функция-член) |
|
| возвращает количество элементов в указанной корзине (открытая функция-член) |
|
| возвращает корзину для указанного ключа (открытая функция-член) |
|
Политика хеширования |
|
| возвращает среднее количество элементов на корзину (открытая функция-член) |
|
| управляет максимальным средним количеством элементов на корзину (открытая функция-член) |
|
| резервирует не меньше указанного количества корзин и перестраивает хеш-таблицу (открытая функция-член) |
|
| резервирует место не менее чем для указанного количества элементов и перестраивает хеш-таблицу (открытая функция-член) |
|
Наблюдатели |
|
| возвращает функцию, используемую для хеширования ключей (открытая функция-член) |
|
| возвращает функцию, используемую для сравнения ключей на равенство (открытая функция-член) |
|
Функции, не являющиеся членами
|
(C++11)(C++11)(удалён в C++20) | сравнивает значения в unordered_multimap (шаблон функции) |
|
(C++11) | специализирует алгоритм std::swap (шаблон функции) |
|
(C++20) | удаляет все элементы, удовлетворяющие заданному условию (шаблон функции) |
Руководства по выводу типов | (начиная с C++17) |
Примечания
| Макрос для проверки поддержки возможностей | Значение | Стандарт | Возможность |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Создание контейнеров из диапазонов и вставка диапазонов в контейнеры |
__cpp_lib_constexpr_unordered_map | 202502L | (C++26) | Константное выражение std::unordered_multimap |
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применён к | Опубликованное поведение | Исправленное поведение |
|---|---|---|---|
| LWG 2050 | C++11 | определения reference, const_reference, pointerи const_pointer основывались на allocator_type | основаны на value_type иstd::allocator_traits |
См. также
|
(C++11) | коллекция пар «ключ-значение» с хешированием по ключам; ключи уникальны (шаблон класса) |
| коллекция пар «ключ-значение», упорядоченных по ключам (шаблон класса) |
|
|
(C++23) | адаптирует два контейнера для предоставления коллекции пар «ключ-значение», упорядоченных по ключам (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/unordered_multimap