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 удовлетворяет требованиям контейнера, контейнера с поддержкой аллокатора, неупорядоченного ассоциативного контейнера.
Параметры шаблона
Типы членов
| Тип члена | Определение |
|---|---|
key_type | Key |
mapped_type | T |
value_type | std::pair<const Key, T> |
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 | Итератор вперед к value_type |
const_iterator | Итератор вперед к const value_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) | Создание и вставка диапазонов для контейнеров |
Пример
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| Отчёт об ошибке | Применяется к | Поведение, опубликованное в документе | Правильное поведение |
|---|---|---|---|
| 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_multimap