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.
| Все функции-члены Однако объявление переменной constexpr | (начиная с 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 |
|
||||
const_pointer |
|
||||
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_type (класс) |
Функции-члены
создаёт multimap (открытая функция-член) |
|
уничтожает multimap (открытая функция-член) |
|
| присваивает значения контейнеру (открытая функция-член) |
|
| возвращает связанный аллокатор (открытая функция-член) |
|
Итераторы |
|
|
(C++11) | возвращает итератор на начало (открытая функция-член) |
|
(C++11) | возвращает итератор на конец (открытая функция-член) |
|
(C++11) | возвращает обратный итератор на начало (открытая функция-член) |
|
(C++11) | возвращает обратный итератор на конец (открытая функция-член) |
Ёмкость |
|
| проверяет, пуст ли контейнер (открытая функция-член) |
|
| возвращает количество элементов (открытая функция-член) |
|
| возвращает максимально возможное количество элементов (открытая функция-член) |
|
Модификаторы |
|
| очищает содержимое (открытая функция-член) |
|
| вставляет элементы или узлы(начиная с C++17) (открытая функция-член) |
|
|
(C++23) | вставляет диапазон элементов (открытая функция-член) |
|
(C++11) | создаёт элемент на месте (открытая функция-член) |
|
(C++11) | создаёт элементы на месте, используя подсказку (открытая функция-член) |
| удаляет элементы (открытая функция-член) |
|
| обменивает содержимое (открытая функция-член) |
|
|
(C++17) | извлекает узлы из контейнера (открытая функция-член) |
|
(C++17) | перемещает узлы из другого контейнера (открытая функция-член) |
Поиск |
|
| возвращает количество элементов с заданным ключом (открытая функция-член) |
|
| находит элемент с заданным ключом (открытая функция-член) |
|
|
(C++20) | проверяет, содержит ли контейнер элемент с заданным ключом (открытая функция-член) |
| возвращает диапазон элементов с заданным ключом (открытая функция-член) |
|
| возвращает итератор на первый элемент, не меньший заданного ключа (открытая функция-член) |
|
| возвращает итератор на первый элемент, больший заданного ключа (открытая функция-член) |
|
Наблюдатели |
|
| возвращает функцию сравнения ключей (открытая функция-член) |
|
возвращает функцию сравнения ключей в объектах типа value_type (открытая функция-член) |
|
Функции, не являющиеся членами
|
(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(удалён в C++20)(C++20) | лексикографически сравнивает значения двух объектов multimap (шаблон функции) |
специализирует алгоритм std::swap (шаблон функции) |
|
|
(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 |
См. также
| набор пар «ключ-значение», отсортированных по ключам; ключи уникальны (шаблон класса) |
|
|
(C++11) | набор пар «ключ-значение» с хешированием по ключам (шаблон класса) |
|
(C++23) | адаптирует два контейнера, чтобы предоставить набор пар «ключ-значение», отсортированных по ключам (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/multimap