Spec-Zone.ru › C++

std::flat_multimap

Определено в заголовочном файле <flat_map>
template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class KeyContainer = std::vector<Key>,
    class MappedContainer = std::vector<T>
> class flat_multimap;

Ассоциативный контейнер flat_multimap представляет собой адаптер контейнера, предоставляющий функциональность ассоциативного контейнера, хранящего пары ключ-значение, позволяя при этом хранить несколько записей с одинаковым значением ключа. Ключи сортируются с помощью функции сравнения Compare.

Шаблон класса flat_multimap выступает в роли обёртки над двумя базовыми контейнерами, переданными в качестве объектов типа KeyContainer и MappedContainer соответственно. Первый контейнер отсортирован, а для каждого ключа соответствующее значение находится во втором контейнере на том же индексе (смещении). Количество элементов в обоих контейнерах одинаково.

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


std::flat_multimap удовлетворяет требованиям Контейнера, Обратимого контейнера, необязательным требованиям к контейнерам и всем требованиям к Ассоциативному контейнеру (включая логарифмическую сложность поиска), за исключением:

  • требований, связанных с узлами, не применимы,
  • требования к инвалидации итераторов отличаются,
  • сложность операций вставки и удаления линейная.

flat_multimap поддерживает большинство операций Ассоциативного контейнера, использующих равные ключи.

Инвалидация итераторов

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

Key - Тип ключей. Программа является некорректной, если Key не совпадает с типом KeyContainer::value_type.
T - Тип сопоставленных значений. Программа является некорректной, если T не совпадает с типом MappedContainer::value_type.
Compare - Тип Compare, обеспечивающий строгое слабое упорядочение.
KeyContainer
MappedContainer
- Типы базовых Последовательных контейнеров для хранения ключей и сопоставленных значений соответственно. Итераторы таких контейнеров должны удовлетворять требованиям LegacyRandomAccessIterator или моделировать random_access_iterator. Вызовы их методов size и max_size не должны завершаться исключением.

Стандартные контейнеры std::vector и std::deque удовлетворяют этим требованиям.

Типы-члены

Тип-член Определение
key_container_type KeyContainer
mapped_container_type MappedContainer
key_type Key
mapped_type T
value_type std::pair<key_type, mapped_type>
key_compare Compare
reference std::pair<const key_type&, mapped_type&>
const_reference std::pair<const key_type&, const mapped_type&>
size_type std::size_t
difference_type std::ptrdiff_t
iterator реализуемый тип LegacyInputIterator и random_access_iterator к value_type
const_iterator реализуемый тип LegacyInputIterator и random_access_iterator к const value_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>
containers тип, описывающий базовые контейнеры

struct containers { key_container_type keys; mapped_container_type values; };

Вложенные классы

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

Объекты-члены

Название члена Определение
c (приватный) объект типа containers
(только для иллюстрации*)
compare (приватный) объект-функция сравнения типа key_compare
(только для иллюстрации*)

Члены-функции

(конструктор)
создаёт flat_multimap
(публичный член-функция)
(деструктор)
уничтожает flat_multimap
(публичный член-функция)
operator=
присваивает значения адаптеру контейнера
(публичный член-функция)
Доступ к элементам
at
доступ к указанному элементу с проверкой границ
(публичный член-функция)
operator[]
доступ к указанному элементу
(публичный член-функция)
Итераторы
begincbegin
возвращает итератор к началу
(публичный член-функция)
endcend
возвращает итератор к концу
(публичный член-функция)
rbegincrbegin
возвращает обратный итератор к началу
(публичный член-функция)
rendcrend
возвращает обратный итератор к концу
(публичный член-функция)
Емкость
empty
проверяет, пуст ли адаптер контейнера
(публичный член-функция)
size
возвращает количество элементов
(публичный член-функция)
max_size
возвращает максимальное возможное количество элементов
(публичный член-функция)
Модификаторы
emplace
создаёт элемент на месте
(публичный член-функция)
emplace_hint
создаёт элементы на месте с подсказкой
(публичный член-функция)
try_emplace
вставляет на место, если ключ не существует, ничего не делает, если ключ существует
(публичный член-функция)
insert
вставляет элементы
(публичный член-функция)
insert_range
вставляет диапазон элементов
(публичный член-функция)
insert_or_assign
вставляет элемент или присваивает текущему элементу, если ключ уже существует
(публичный член-функция)
extract
извлекает подлежащие контейнеры
(публичный член-функция)
replace
заменяет подлежащие контейнеры
(публичный член-функция)
erase
удаляет элементы
(публичный член-функция)
swap
меняет содержимое
(публичный член-функция)
clear
очищает содержимое
(публичный член-функция)
Поиск
find
находит элемент с указанным ключом
(публичный член-функция)
count
возвращает количество элементов, соответствующих заданному ключу
(публичный член-функция)
contains
проверяет, содержит ли контейнер элемент с заданным ключом
(публичный член-функция)
lower_bound
возвращает итератор к первому элементу, не меньше заданного ключа
(публичный член-функция)
upper_bound
возвращает итератор к первому элементу, больше заданного ключа
(публичный член-функция)
equal_range
возвращает диапазон элементов, соответствующих заданному ключу
(публичный член-функция)
Наблюдатели
key_comp
возвращает функцию, сравнивающую ключи
(публичный член-функция)
value_comp
возвращает функцию, сравнивающую ключи в объектах типа value_type
(публичный член-функция)
keys
прямой доступ к контейнеру базовых ключей
(публичный член-функция)
values
прямой доступ к контейнеру базовых значений
(публичный член-функция)

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

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

Вспомогательные классы

std::uses_allocator<std::flat_multimap>
(C++23)
специализирует тип-трейт std::uses_allocator
(специализация шаблонного класса)

Метки

sorted_equivalentsorted_equivalent_t
(C++23)
метка, используемая для обозначения того, что элементы контейнера или диапазона отсортированы (не требуется уникальность)
(метка)

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

Примечания

Типы членов iterator и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегрузок функций, использующих два типа в качестве типов параметров, может нарушить правило одной дефиниции. Поскольку iterator преобразуется в const_iterator, вместо этого будет работать одна функция с const_iterator в качестве типа параметра.

Макрос проверки наличия функции Значение Std Функция
__cpp_lib_flat_map 202207L (C++23) std::flat_map и std::flat_multimap

Пример

См. также

flat_map
(C++23)
адаптирует два контейнера для обеспечения коллекции пар ключ-значение, отсортированных по уникальным ключам
(шаблон класса)
multimap
коллекция пар ключ-значение, отсортированных по ключам
(шаблон класса)
unordered_multimap
(C++11)
коллекция пар ключ-значение, хешируемых по ключам
(шаблон класса)

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

Spec-Zone.ru

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