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 не должны завершаться исключением. Стандартные контейнеры |
Типы-члены
| Тип-член | Определение |
|---|---|
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 | тип, описывающий базовые контейнеры
|
Вложенные классы
сравнивает объекты типа value_type (класс) |
Объекты-члены
| Название члена | Определение |
|---|---|
c (приватный) | объект типа containers(только для иллюстрации*) |
compare (приватный) | объект-функция сравнения типа key_compare(только для иллюстрации*) |
Члены-функции
создаёт flat_multimap (публичный член-функция) |
|
уничтожает flat_multimap (публичный член-функция) |
|
| присваивает значения адаптеру контейнера (публичный член-функция) |
|
Доступ к элементам |
|
| доступ к указанному элементу с проверкой границ (публичный член-функция) |
|
| доступ к указанному элементу (публичный член-функция) |
|
Итераторы |
|
| возвращает итератор к началу (публичный член-функция) |
|
| возвращает итератор к концу (публичный член-функция) |
|
| возвращает обратный итератор к началу (публичный член-функция) |
|
| возвращает обратный итератор к концу (публичный член-функция) |
|
Емкость |
|
| проверяет, пуст ли адаптер контейнера (публичный член-функция) |
|
| возвращает количество элементов (публичный член-функция) |
|
| возвращает максимальное возможное количество элементов (публичный член-функция) |
|
Модификаторы |
|
| создаёт элемент на месте (публичный член-функция) |
|
| создаёт элементы на месте с подсказкой (публичный член-функция) |
|
| вставляет на место, если ключ не существует, ничего не делает, если ключ существует (публичный член-функция) |
|
| вставляет элементы (публичный член-функция) |
|
| вставляет диапазон элементов (публичный член-функция) |
|
| вставляет элемент или присваивает текущему элементу, если ключ уже существует (публичный член-функция) |
|
| извлекает подлежащие контейнеры (публичный член-функция) |
|
| заменяет подлежащие контейнеры (публичный член-функция) |
|
| удаляет элементы (публичный член-функция) |
|
| меняет содержимое (публичный член-функция) |
|
| очищает содержимое (публичный член-функция) |
|
Поиск |
|
| находит элемент с указанным ключом (публичный член-функция) |
|
| возвращает количество элементов, соответствующих заданному ключу (публичный член-функция) |
|
| проверяет, содержит ли контейнер элемент с заданным ключом (публичный член-функция) |
|
| возвращает итератор к первому элементу, не меньше заданного ключа (публичный член-функция) |
|
| возвращает итератор к первому элементу, больше заданного ключа (публичный член-функция) |
|
| возвращает диапазон элементов, соответствующих заданному ключу (публичный член-функция) |
|
Наблюдатели |
|
| возвращает функцию, сравнивающую ключи (публичный член-функция) |
|
возвращает функцию, сравнивающую ключи в объектах типа value_type (публичный член-функция) |
|
| прямой доступ к контейнеру базовых ключей (публичный член-функция) |
|
| прямой доступ к контейнеру базовых значений (публичный член-функция) |
|
Функции, не являющиеся членами
|
(C++23) | лексикографически сравнивает значения двух flat_multimaps (шаблон функции) |
|
(C++23) | специализирует алгоритм std::swap (шаблон функции) |
|
(C++23) | удаляет все элементы, удовлетворяющие определенным критериям (шаблон функции) |
Вспомогательные классы
|
(C++23) | специализирует тип-трейт std::uses_allocator (специализация шаблонного класса) |
Метки
|
(C++23) | метка, используемая для обозначения того, что элементы контейнера или диапазона отсортированы (не требуется уникальность) (метка) |
Руководства по выводу
Примечания
Типы членов iterator и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегрузок функций, использующих два типа в качестве типов параметров, может нарушить правило одной дефиниции. Поскольку iterator преобразуется в const_iterator, вместо этого будет работать одна функция с const_iterator в качестве типа параметра.
| Макрос проверки наличия функции | Значение | Std | Функция |
|---|---|---|---|
__cpp_lib_flat_map | 202207L | (C++23) |
std::flat_map и std::flat_multimap |
Пример
См. также
|
(C++23) | адаптирует два контейнера для обеспечения коллекции пар ключ-значение, отсортированных по уникальным ключам (шаблон класса) |
| коллекция пар ключ-значение, отсортированных по ключам (шаблон класса) |
|
|
(C++11) | коллекция пар ключ-значение, хешируемых по ключам (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/flat_multimap