Spec-Zone.ru › C++

std::multimap

Определён в заголовочном файле <map>
template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T>>
> class multimap;
(1)
namespace pmr {
    template<
        class Key,
        class T,
        class Compare = std::less<Key>
    > using multimap = std::multimap<Key, T, Compare,
        std::pmr::polymorphic_allocator<std::pair<const Key, T>>>;
}
(2) (начиная с C++17)

std::multimap — это ассоциативный контейнер, содержащий отсортированный список пар «ключ-значение» и допускающий несколько элементов с одинаковым ключом. Сортировка выполняется в соответствии с функцией сравнения Compare, применяемой к ключам. Операции поиска, вставки и удаления имеют логарифмическую сложность.

Итераторы std::multimap обходят элементы в порядке неубывания ключей, где неубывание определяется сравнением, использованным при создании контейнера. То есть для

  • m, std::multimap
  • it_l и it_r — разыменовываемых итераторов на m, для которых выполняется it_l < it_r.

m.value_comp()(*it_r, *it_l) == false (от наименьшего к наибольшему при использовании сравнения по умолчанию).

Порядок пар «ключ-значение» с эквивалентными ключами соответствует порядку вставки и не изменяется.

(начиная с C++11)

Везде, где стандартная библиотека использует требования Compare, эквивалентность определяется с помощью отношения эквивалентности, описанного в Compare. Говоря упрощённо, два объекта a и b считаются эквивалентными, если ни один из них не сравнивается как меньший другого: !comp(a, b) && !comp(b, a).

std::multimap соответствует требованиям Container, AllocatorAwareContainer, AssociativeContainer и ReversibleContainer.

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

Однако объявление переменной constexpr std::multimap обычно является ошибкой, поскольку константное вычисление требует, чтобы любое динамически выделенное хранилище освобождалось в рамках того же вычисления, чего обычно не происходит с инициализатором std::multimap.

(начиная с C++26)

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

Типы-члены

Тип Определение
key_type Key
mapped_type T
value_type std::pair<constKey,T>
size_type беззнаковый целочисленный тип (обычно std::size_t)
difference_type знаковый целочисленный тип (обычно std::ptrdiff_t)
key_compare Compare
allocator_type Allocator
reference value_type&
const_reference constvalue_type&
pointer

Allocator::pointer

(до C++11)

std::allocator_traits<Allocator>::pointer

(начиная с C++11)
const_pointer

Allocator::const_pointer

(до C++11)

std::allocator_traits<Allocator>::const_pointer

(начиная с C++11)
iterator LegacyBidirectionalIterator и ConstexprIterator(начиная с C++26) для value_type
const_iterator LegacyBidirectionalIterator и ConstexprIterator(начиная с C++26) для constvalue_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>
node_type (начиная с C++17) специализация дескриптора узла, представляющая узел контейнера

Классы-члены

value_compare
сравнивает объекты типа value_type
(класс)

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

(constructor)
создаёт multimap
(открытая функция-член)
(destructor)
уничтожает multimap
(открытая функция-член)
operator=
присваивает значения контейнеру
(открытая функция-член)
get_allocator
возвращает связанный аллокатор
(открытая функция-член)
Итераторы
begincbegin
(C++11)
возвращает итератор на начало
(открытая функция-член)
endcend
(C++11)
возвращает итератор на конец
(открытая функция-член)
rbegincrbegin
(C++11)
возвращает обратный итератор на начало
(открытая функция-член)
rendcrend
(C++11)
возвращает обратный итератор на конец
(открытая функция-член)
Ёмкость
empty
проверяет, пуст ли контейнер
(открытая функция-член)
size
возвращает количество элементов
(открытая функция-член)
max_size
возвращает максимально возможное количество элементов
(открытая функция-член)
Модификаторы
clear
очищает содержимое
(открытая функция-член)
insert
вставляет элементы или узлы(начиная с C++17)
(открытая функция-член)
insert_range
(C++23)
вставляет диапазон элементов
(открытая функция-член)
emplace
(C++11)
создаёт элемент на месте
(открытая функция-член)
emplace_hint
(C++11)
создаёт элементы на месте, используя подсказку
(открытая функция-член)
erase
удаляет элементы
(открытая функция-член)
swap
обменивает содержимое
(открытая функция-член)
extract
(C++17)
извлекает узлы из контейнера
(открытая функция-член)
merge
(C++17)
перемещает узлы из другого контейнера
(открытая функция-член)
Поиск
count
возвращает количество элементов с заданным ключом
(открытая функция-член)
find
находит элемент с заданным ключом
(открытая функция-член)
contains
(C++20)
проверяет, содержит ли контейнер элемент с заданным ключом
(открытая функция-член)
equal_range
возвращает диапазон элементов с заданным ключом
(открытая функция-член)
lower_bound
возвращает итератор на первый элемент, не меньший заданного ключа
(открытая функция-член)
upper_bound
возвращает итератор на первый элемент, больший заданного ключа
(открытая функция-член)
Наблюдатели
key_comp
возвращает функцию сравнения ключей
(открытая функция-член)
value_comp
возвращает функцию сравнения ключей в объектах типа value_type
(открытая функция-член)

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

operator==operator!=operator<operator<=operator>operator>=operator<=>
(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(C++20)
лексикографически сравнивает значения двух объектов multimap
(шаблон функции)
std::swap(std::multimap)
специализирует алгоритм std::swap
(шаблон функции)
erase_if(std::multimap)
(C++20)
удаляет все элементы, удовлетворяющие заданным критериям
(шаблон функции)

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

(начиная с C++17)

Примечания

Макрос проверки поддержки функциональности Значение Стандарт Функциональность
__cpp_lib_containers_ranges 202202L (C++23) Создание контейнеров из диапазонов и вставка диапазонов в контейнеры
__cpp_lib_constexpr_map 202502L (C++26) Constexpr std::multimap

Пример

Отчёты об ошибках

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

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 230 C++98 Key не требовалось удовлетворять требованиям CopyConstructible
(ключ типа Key мог быть неконструируемым)
Key также должен удовлетворять требованиям
CopyConstructible

См. также

map
набор пар «ключ-значение», отсортированных по ключам; ключи уникальны
(шаблон класса)
unordered_multimap
(C++11)
набор пар «ключ-значение» с хешированием по ключам
(шаблон класса)
flat_multimap
(C++23)
адаптирует два контейнера, чтобы предоставить набор пар «ключ-значение», отсортированных по ключам
(шаблон класса)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/multimap

Spec-Zone.ru

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