Namespaces
Variants

std:: flat_multimap

From cppreference.net
Определено в заголовочном файле <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 ;
(начиная с C++23)

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

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

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


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

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

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

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

Однако, объекты std::flat_multimap обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)

Содержание

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

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

Key - Тип ключей. Программа некорректна, если Key не совпадает с типом KeyContainer::value_type .
T - Тип сопоставленных значений. Программа некорректна, если T не совпадает с типом MappedContainer::value_type .
Compare - Тип Compare , предоставляющий строгое слабое упорядочение.
KeyContainer
MappedContainer
- Типы базовых SequenceContainer для хранения ключей и сопоставленных значений соответственно. Итераторы таких контейнеров должны удовлетворять требованиям 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 , ConstexprIterator (начиная с C++26) и random_access_iterator для value_type
const_iterator определяемый реализацией LegacyInputIterator , ConstexprIterator (начиная с C++26) и 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_type
(класс)

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

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

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

создаёт flat_multimap
(публичная функция-член)
(destructor)
(implicitly declared)
уничтожает каждый элемент адаптера контейнера
(public member function)
присваивает значения адаптеру контейнера
(public member function)
Итераторы
возвращает итератор на начало
(публичная функция-член)
возвращает итератор на конец
(публичная функция-член)
возвращает обратный итератор на начало
(публичная функция-член)
возвращает обратный итератор на конец
(публичная функция-член)
Ёмкость
проверяет, является ли адаптер контейнера пустым
(public member function)
возвращает количество элементов
(публичная функция-член)
возвращает максимально возможное количество элементов
(публичная функция-член)
Модификаторы
создаёт элемент на месте
(публичная функция-член)
создаёт элементы на месте с использованием подсказки
(публичная функция-член)
вставляет элементы
(публичная функция-член)
вставляет диапазон элементов
(публичная функция-член)
извлекает базовые контейнеры
(публичная функция-член)
заменяет базовые контейнеры
(публичная функция-член)
удаляет элементы
(публичная функция-член)
обменивает содержимое
(публичная функция-член)
очищает содержимое
(публичная функция-член)
Поиск
находит элемент с указанным ключом
(публичная функция-член)
возвращает количество элементов, соответствующих определённому ключу
(public member function)
проверяет, содержит ли контейнер элемент с указанным ключом
(public member function)
возвращает итератор на первый элемент не меньший чем заданный ключ
(публичная функция-член)
возвращает итератор на первый элемент больший чем заданный ключ
(public member function)
возвращает диапазон элементов, соответствующих определённому ключу
(публичная функция-член)
Наблюдатели
возвращает функцию, которая сравнивает ключи
(public member function)
возвращает функцию, которая сравнивает ключи в объектах типа value_type
(публичная функция-член)
прямой доступ к контейнеру ключей
(публичная функция-член)
прямой доступ к базовому контейнеру значений
(публичная функция-член)

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

лексикографически сравнивает значения двух flat_multimap контейнеров
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)
удаляет все элементы, удовлетворяющие определённым критериям
(шаблон функции)

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

специализирует std::uses_allocator type trait
(специализация шаблона класса)

Теги

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

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

Примечания

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

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_flat_map 202207L (C++23) std::flat_map и std::flat_multimap
__cpp_lib_constexpr_flat_map 202502L (C++26) constexpr std::flat_multimap

Пример

Смотрите также

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