Namespaces
Variants

std:: unordered_multimap

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

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

конструирует 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)
Перевод:

Руководства по выводу

(начиная с 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)