Namespaces
Variants

std:: flat_multiset

From cppreference.net
Определено в заголовочном файле <flat_set>
template <

class Key,
class Compare = std:: less < Key > ,
class KeyContainer = std:: vector < Key >

> class flat_multiset ;
(начиная с C++23)

Плоский мультимножество — это адаптер контейнера , предоставляющий функциональность ассоциативного контейнера, хранящего отсортированное множество объектов типа Key . В отличие от std::flat_set , допускаются множественные ключи с эквивалентными значениями. Сортировка выполняется с использованием функции сравнения ключей Compare .

Шаблон класса flat_multiset действует как обёртка для базового отсортированного контейнера, передаваемого в качестве объекта типа KeyContainer .

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


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

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

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

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

Однако, объекты std::flat_multiset обычно не могут быть constexpr , поскольку любая динамически выделенная память должна быть освобождена в том же вычислении константного выражения.

(since C++26)

Содержание

Инвалидация итераторов

Параметры шаблона

Key - Тип хранимых элементов. Программа является некорректной, если Key не является тем же типом, что и KeyContainer::value_type .
Compare - Тип Compare , предоставляющий строгое слабое упорядочение.
KeyContainer - Тип базового SequenceContainer для хранения элементов. Итераторы такого контейнера должны удовлетворять требованиям LegacyRandomAccessIterator или моделировать random_access_iterator .

Стандартные контейнеры std::vector и std::deque удовлетворяют этим требованиям.

Типы членов

Тип Определение
container_type Key Container
key_type Key
value_type Key
key_compare Compare
value_compare Compare
reference value_type &
const_reference const value_type &
size_type typename KeyContainer :: size_type
difference_type typename KeyContainer :: difference_type
iterator определяемый реализацией LegacyRandomAccessIterator , ConstexprIterator (начиная с C++26) и random_access_iterator для value_type
const_iterator определяемый реализацией LegacyRandomAccessIterator , ConstexprIterator (начиная с C++26) и random_access_iterator для const value_type
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

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

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

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

конструирует flat_multiset
(публичная функция-член)
(destructor)
(implicitly declared)
уничтожает каждый элемент адаптера контейнера
(public member function)
присваивает значения адаптеру контейнера
(публичная функция-член)
Итераторы
возвращает итератор на начало
(публичная функция-член)
возвращает итератор на конец
(публичная функция-член)
возвращает обратный итератор на начало
(публичная функция-член)
возвращает обратный итератор на конец
(публичная функция-член)
Ёмкость
проверяет, является ли адаптер контейнера пустым
(public member function)
возвращает количество элементов
(публичная функция-член)
возвращает максимально возможное количество элементов
(public member function)
Модификаторы
создаёт элемент на месте
(публичная функция-член)
создаёт элементы на месте с использованием подсказки
(публичная функция-член)
вставляет элементы
(публичная функция-член)
вставляет диапазон элементов
(публичная функция-член)
извлекает базовый контейнер
(публичная функция-член)
заменяет базовый контейнер
(публичная функция-член)
удаляет элементы
(публичная функция-член)
обменивает содержимое
(публичная функция-член)
очищает содержимое
(публичная функция-член)
Поиск
находит элемент с указанным ключом
(публичная функция-член)
возвращает количество элементов, соответствующих заданному ключу
(public member function)
проверяет, содержит ли контейнер элемент с указанным ключом
(public member function)
возвращает итератор на первый элемент не меньший чем заданный ключ
(публичная функция-член)
возвращает итератор на первый элемент больший чем заданный ключ
(публичная функция-член)
возвращает диапазон элементов, соответствующих заданному ключу
(публичная функция-член)
Наблюдатели
возвращает функцию, которая сравнивает ключи
(публичная функция-член)
возвращает функцию, которая сравнивает ключи в объектах типа value_type
(public member function)

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

лексикографически сравнивает значения двух flat_multiset ов
(шаблон функции)
специализирует алгоритм std::swap
(шаблон функции)
удаляет все элементы, удовлетворяющие определённым критериям
(шаблон функции)

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

специализирует std::uses_allocator type trait
(специализация шаблона класса)

Теги

указывает, что элементы диапазона отсортированы (уникальность не требуется)
(тег)

Руководства по выводу

Примечания

Типы-члены iterator и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегруженных функций, использующих эти два типа в качестве типов параметров, может нарушать Правило Одного Определения . Поскольку iterator конвертируется в const_iterator , вместо этого будет работать единственная функция с параметром типа const_iterator .

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_flat_set 202207L (C++23) std::flat_set и std::flat_multiset
__cpp_lib_constexpr_flat_set 202502L (C++26) constexpr std::flat_multiset

Пример

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

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