std:: flat_map
|
Определено в заголовочном файле
<flat_map>
|
||
|
template
<
class
Key,
|
(начиная с 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
при вычислении константного выражения.
Однако, объекты
|
(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
|
Классы-члены
сравнивает объекты типа
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
(публичная функция-член) |
|
|
прямой доступ к контейнеру ключей
(публичная функция-член) |
|
|
прямой доступ к базовому контейнеру значений
(публичная функция-член) |
|
Функции, не являющиеся членами класса
|
(C++23)
|
лексикографически сравнивает значения двух
flat_map
контейнеров
(шаблон функции) |
|
(C++23)
|
специализирует алгоритм
std::swap
(шаблон функции) |
|
(C++23)
|
удаляет все элементы, удовлетворяющие определённым критериям
(шаблон функции) |
Вспомогательные классы
|
специализирует
std::uses_allocator
type trait
(специализация шаблона класса) |
Теги
|
(C++23)
|
указывает, что элементы диапазона отсортированы и уникальны
(тег) |
Руководства по выводу
Примечания
Типы-члены
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
|
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
(C++23)
|
адаптирует два контейнера для предоставления коллекции пар ключ-значение, отсортированных по ключам
(шаблон класса) |
|
коллекция пар ключ-значение, отсортированных по ключам, ключи уникальны
(шаблон класса) |
|
|
(C++11)
|
коллекция пар ключ-значение, хэшированных по ключам, ключи уникальны
(шаблон класса) |