Namespaces
Variants

std:: unordered_multimap

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

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

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

std::unordered_multimap соответствует требованиям Container , AllocatorAwareContainer , UnorderedAssociativeContainer .

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

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

(since C++26)

Содержание

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

Типы-члены

Тип Определение
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 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) специализация дескриптор узла представляющая узел контейнера

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

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

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

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

Deduction guides

(since C++17)
Перевод:

Примечания

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

Пример

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

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

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

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

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