std::flat_map
Определён в заголовочном файле <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) |
Плоская карта — это адаптер контейнера, предоставляющий функциональность ассоциативного контейнера, содержащего пары «ключ-значение» с уникальными ключами. Ключи упорядочиваются с помощью функции сравнения Compare.
Шаблон класса flat_map служит обёрткой для двух базовых контейнеров, передаваемых соответственно как объекты типов KeyContainer и MappedContainer. Первый контейнер упорядочен, а для каждого ключа соответствующее ему значение находится во втором контейнере по тому же индексу (смещению). Число элементов в обоих контейнерах одинаково.
Везде, где стандартная библиотека использует требования Compare, уникальность определяется с помощью отношения эквивалентности. Неформально говоря, два объекта a и b считаются эквивалентными, если ни один из них не сравнивается как меньший другого: !comp(a, b) && !comp(b, a).
std::flat_map удовлетворяет требованиям Container, ReversibleContainer, необязательным требованиям к контейнерам и всем требованиям AssociativeContainer (включая логарифмическую сложность поиска), за исключением следующего:
- требования, связанные с узлами, неприменимы,
- требования к инвалидации итераторов отличаются,
- сложность операций вставки и удаления линейная.
Плоская карта поддерживает большинство операций AssociativeContainer, использующих уникальные ключи.
| Все функции-члены Однако объявление переменной | (начиная с C++26) |
Инвалидация итераторов
Параметры шаблона
| Key | - | Тип ключей. Программа некорректна, если Key не является тем же типом, что и KeyContainer::value_type. |
| T | - | Тип отображаемых значений. Программа некорректна, если T не является тем же типом, что и MappedContainer::value_type. |
| Compare | - | Тип Compare, задающий строгое слабое упорядочение. |
| KeyContainer MappedContainer | - | Типы базовых SequenceContainer, используемых соответственно для хранения ключей и отображаемых значений. Итераторы таких контейнеров должны удовлетворять требованиям 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<constkey_type&,mapped_type&> |
const_reference | std::pair<constkey_type&,constmapped_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 для constvalue_type |
reverse_iterator | std::reverse_iterator<iterator> |
const_reverse_iterator | std::reverse_iterator<const_iterator> |
containers | тип, описывающий базовые контейнеры
|
Классы-члены
сравнивает объекты типа value_type (класс) |
Объекты-члены
| Член | Описание |
|---|---|
containers c (закрытый) | адаптированные контейнеры (объект-член, используемый только для описания*) |
key_compare compare (закрытый) | объект функции сравнения (объект-член, используемый только для описания*) |
Функции-члены
создаёт flat_map (открытая функция-член) |
|
|
(деструктор)
(объявлен неявно) | уничтожает каждый элемент адаптера контейнера (открытая функция-член) |
| присваивает значения адаптеру контейнера (открытая функция-член) |
|
Доступ к элементам |
|
| обращается к указанному элементу с проверкой границ (открытая функция-член) |
|
| обращается к указанному элементу или вставляет его (открытая функция-член) |
|
Итераторы |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает итератор на конец (открытая функция-член) |
|
| возвращает обратный итератор на начало (открытая функция-член) |
|
| возвращает обратный итератор на конец (открытая функция-член) |
|
Ёмкость |
|
| проверяет, пуст ли адаптер контейнера (открытая функция-член) |
|
| возвращает число элементов (открытая функция-член) |
|
| возвращает максимально возможное число элементов (открытая функция-член) |
|
Модификаторы |
|
| создаёт элемент на месте (открытая функция-член) |
|
| создаёт элементы на месте, используя подсказку (открытая функция-член) |
|
| вставляет элемент на месте, если ключ не существует; если ключ существует, ничего не делает (открытая функция-член) |
|
| вставляет элементы (открытая функция-член) |
|
| вставляет диапазон элементов (открытая функция-член) |
|
| вставляет элемент или присваивает значение существующему элементу, если ключ уже существует (открытая функция-член) |
|
| извлекает базовые контейнеры (открытая функция-член) |
|
| заменяет базовые контейнеры (открытая функция-член) |
|
| удаляет элементы (открытая функция-член) |
|
| обменивает содержимое (открытая функция-член) |
|
| очищает содержимое (открытая функция-член) |
|
Поиск |
|
| находит элемент с заданным ключом (открытая функция-член) |
|
| возвращает число элементов с заданным ключом (открытая функция-член) |
|
| проверяет, содержит ли контейнер элемент с заданным ключом (открытая функция-член) |
|
| возвращает итератор на первый элемент, не меньший заданного ключа (открытая функция-член) |
|
| возвращает итератор на первый элемент, больший заданного ключа (открытая функция-член) |
|
| возвращает диапазон элементов с заданным ключом (открытая функция-член) |
|
Наблюдатели |
|
| возвращает функцию сравнения ключей (открытая функция-член) |
|
возвращает функцию сравнения ключей в объектах типа value_type (открытая функция-член) |
|
| прямой доступ к базовому контейнеру ключей (открытая функция-член) |
|
| прямой доступ к базовому контейнеру значений (открытая функция-член) |
|
Функции, не являющиеся членами
|
(C++23) | лексикографически сравнивает значения двух объектов flat_map (шаблон функции) |
|
(C++23) | специализирует алгоритм std::swap (шаблон функции) |
|
(C++23) | удаляет все элементы, удовлетворяющие заданному критерию (шаблон функции) |
Вспомогательные классы
|
(C++23) | специализирует характеристику типа std::uses_allocator (специализация шаблона класса) |
Теги
|
(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) | Константное вычисление std::flat_map |
Пример
См. также
|
(C++23) | адаптирует два контейнера для хранения коллекции пар «ключ-значение», упорядоченных по ключам (шаблон класса) |
| коллекция пар «ключ-значение», упорядоченных по ключам; ключи уникальны (шаблон класса) |
|
|
(C++11) | коллекция пар «ключ-значение», хешируемых по ключам; ключи уникальны (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/flat_map