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.
Параметры шаблона
Типы членов
| Тип члена | Определение | ||||
|---|---|---|---|---|---|
key_type | Key |
||||
mapped_type | T |
||||
value_type | std::pair<const Key, T> | ||||
size_type | Беззнаковый целочисленный тип (обычно std::size_t) |
||||
difference_type | Знаковый целочисленный тип (обычно std::ptrdiff_t) |
||||
key_compare | Compare |
||||
allocator_type | Allocator |
||||
reference | value_type& |
||||
const_reference | const value_type& | ||||
pointer |
|
||||
const_pointer |
|
||||
iterator | Двунаправленный итератор на value_type |
||||
const_iterator | Двунаправленный итератор на const value_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) | лексикографически сравнивает значения двух multimaps (шаблон функции) |
специализирует алгоритм std::swap (шаблон функции) |
|
|
(C++20) | удаляет все элементы, удовлетворяющие определённым критериям (шаблон функции) |
Руководства по выводу | (с C++17) |
Примечания
| Тест на наличие функции макрос | Значение | Стандарт | Функция |
|---|---|---|---|
__cpp_lib_containers_ranges | 202202L | (C++23) | Создание и вставка в контейнеры для диапазонов |
Пример
Отчеты об ошибках
Ниже приведены отчеты об ошибках, изменяющих поведение, которые были применены ретроактивно к ранее опубликованным стандартам C++.
| Отчет об ошибке | Применено к | Поведение, опубликованное | Правильное поведение |
|---|---|---|---|
| LWG 230 | C++98 |
Key не должно быть конструктором копирования(ключ типа Key может не быть создан) |
Key также должно быть конструктором копирования |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/multimap