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