Spec-Zone.ru › C++

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
(публичный член-функция)
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_multimap
(шаблон функции)
std::swap(std::unordered_multimap)
(C++11)
специализирует алгоритм std::swap
(шаблон функции)
erase_if(std::unordered_multimap)
(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

Spec-Zone.ru

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