Spec-Zone.ru › C++

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, использующих уникальные ключи.

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

Однако объявление переменной std::flat_map как constexpr обычно является ошибкой, поскольку при константном вычислении требуется освободить любое динамически выделенное хранилище в рамках того же вычисления, чего обычно не происходит при инициализации std::flat_map.

(начиная с 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<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 тип, описывающий базовые контейнеры

struct containers { key_container_type keys; mapped_container_type values; };

Классы-члены

value_compare
сравнивает объекты типа value_type
(класс)

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

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

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

(конструктор)
создаёт flat_map
(открытая функция-член)
(деструктор)
(объявлен неявно)
уничтожает каждый элемент адаптера контейнера
(открытая функция-член)
operator=
присваивает значения адаптеру контейнера
(открытая функция-член)
Доступ к элементам
at
обращается к указанному элементу с проверкой границ
(открытая функция-член)
operator[]
обращается к указанному элементу или вставляет его
(открытая функция-член)
Итераторы
begincbegin
возвращает итератор на начало
(открытая функция-член)
endcend
возвращает итератор на конец
(открытая функция-член)
rbegincrbegin
возвращает обратный итератор на начало
(открытая функция-член)
rendcrend
возвращает обратный итератор на конец
(открытая функция-член)
Ёмкость
empty
проверяет, пуст ли адаптер контейнера
(открытая функция-член)
size
возвращает число элементов
(открытая функция-член)
max_size
возвращает максимально возможное число элементов
(открытая функция-член)
Модификаторы
emplace
создаёт элемент на месте
(открытая функция-член)
emplace_hint
создаёт элементы на месте, используя подсказку
(открытая функция-член)
try_emplace
вставляет элемент на месте, если ключ не существует; если ключ существует, ничего не делает
(открытая функция-член)
insert
вставляет элементы
(открытая функция-член)
insert_range
вставляет диапазон элементов
(открытая функция-член)
insert_or_assign
вставляет элемент или присваивает значение существующему элементу, если ключ уже существует
(открытая функция-член)
extract
извлекает базовые контейнеры
(открытая функция-член)
replace
заменяет базовые контейнеры
(открытая функция-член)
erase
удаляет элементы
(открытая функция-член)
swap
обменивает содержимое
(открытая функция-член)
clear
очищает содержимое
(открытая функция-член)
Поиск
find
находит элемент с заданным ключом
(открытая функция-член)
count
возвращает число элементов с заданным ключом
(открытая функция-член)
contains
проверяет, содержит ли контейнер элемент с заданным ключом
(открытая функция-член)
lower_bound
возвращает итератор на первый элемент, не меньший заданного ключа
(открытая функция-член)
upper_bound
возвращает итератор на первый элемент, больший заданного ключа
(открытая функция-член)
equal_range
возвращает диапазон элементов с заданным ключом
(открытая функция-член)
Наблюдатели
key_comp
возвращает функцию сравнения ключей
(открытая функция-член)
value_comp
возвращает функцию сравнения ключей в объектах типа value_type
(открытая функция-член)
keys
прямой доступ к базовому контейнеру ключей
(открытая функция-член)
values
прямой доступ к базовому контейнеру значений
(открытая функция-член)

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

operator==operator<=>
(C++23)
лексикографически сравнивает значения двух объектов flat_map
(шаблон функции)
std::swap(std::flat_map)
(C++23)
специализирует алгоритм std::swap
(шаблон функции)
erase_if(std::flat_map)
(C++23)
удаляет все элементы, удовлетворяющие заданному критерию
(шаблон функции)

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

std::uses_allocator<std::flat_map>
(C++23)
специализирует характеристику типа std::uses_allocator
(специализация шаблона класса)

Теги

sorted_uniquesorted_unique_t
(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

Пример

См. также

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/flat_map

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API