Namespaces
Variants

std:: flat_map

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_map ;
(начиная с C++23)

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

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

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

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

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

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

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

Однако, объекты std::flat_map обычно не могут быть 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_map
(публичная функция-член)
(destructor)
(implicitly declared)
уничтожает каждый элемент адаптера контейнера
(public member function)
присваивает значения адаптеру контейнера
(публичная функция-член)
Доступ к элементам
доступ к указанному элементу с проверкой границ
(публичная функция-член)
доступ или вставка указанного элемента
(public member function)
Итераторы
возвращает итератор на начало
(публичная функция-член)
возвращает итератор на конец
(публичная функция-член)
возвращает обратный итератор на начало
(публичная функция-член)
возвращает обратный итератор на конец
(public member function)
Ёмкость
проверяет, является ли адаптер контейнера пустым
(публичная функция-член)
возвращает количество элементов
(public member function)
возвращает максимально возможное количество элементов
(публичная функция-член)
Модификаторы
создаёт элемент на месте
(публичная функция-член)
создаёт элементы на месте с использованием подсказки
(публичная функция-член)
вставляет на месте, если ключ не существует, ничего не делает, если ключ существует
(публичная функция-член)
вставляет элементы
(публичная функция-член)
вставляет диапазон элементов
(публичная функция-член)
вставляет элемент или присваивает значение текущему элементу, если ключ уже существует
(публичная функция-член)
извлекает базовые контейнеры
(публичная функция-член)
заменяет базовые контейнеры
(публичная функция-член)
удаляет элементы
(публичная функция-член)
обменивает содержимое
(public member function)
очищает содержимое
(публичная функция-член)
Поиск
находит элемент с заданным ключом
(публичная функция-член)
возвращает количество элементов, соответствующих заданному ключу
(публичная функция-член)
проверяет, содержит ли контейнер элемент с указанным ключом
(публичная функция-член)
возвращает итератор на первый элемент не меньший чем заданный ключ
(публичная функция-член)
возвращает итератор на первый элемент больший чем заданный ключ
(публичная функция-член)
возвращает диапазон элементов, соответствующих определённому ключу
(публичная функция-член)
Наблюдатели
возвращает функцию, которая сравнивает ключи
(public member function)
возвращает функцию, которая сравнивает ключи в объектах типа value_type
(публичная функция-член)
прямой доступ к контейнеру ключей
(публичная функция-член)
прямой доступ к базовому контейнеру значений
(публичная функция-член)

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

лексикографически сравнивает значения двух flat_map контейнеров
(шаблон функции)
специализирует алгоритм 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_map

Пример

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

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