std::multiset — cppreference.com
Материал из cppreference.com
<tbody> </tbody>
| Определено в заголовочном файле |
||
|
|
(1) | |
|
|
(2) | (начиная с C++17) |
std::multiset это ассоциативный контейнер, который содержит отсортированный набор объектов типа Key. В отличие от std::set, в multiset допускаются ключи с эквивалентными значениями. Сортировка осуществляется с помощью функции сравнения ключей Compare. Операции поиска, удаления и вставки имеют логарифмическую сложность.
Везде, где стандартная библиотека использует требования Compare, эквивалентность определяется с помощью отношения эквивалентности, как описано в Compare. Говоря неточно, два объекта a и b считаются эквивалентными, если ни один из них при сравнении не меньше, чем другой: !comp(a, b) && !comp(b, a).
|
Порядок эквивалентных друг другу элементов определяется очерёдностью их вставки и не меняется. |
(начиная с C++11) |
{{tr|std::multiset соответствует требованиям Container, AllocatorAwareContainer, AssociativeContainer and ReversibleContainer.
Параметры шаблона
Типы-элементы
Функции-элементы
создаёт multiset (public функция-элемент) [править] | |
уничтожает multiset (public функция-элемент) [править] | |
| присваивает значения контейнеру (public функция-элемент) [править] | |
| возвращает связанный аллокатор (public функция-элемент) [править] | |
Итераторы | |
(C++11) |
возвращает итератор на начало (public функция-элемент) [править] |
(C++11) |
возвращает итератор на конец (public функция-элемент) [править] |
(C++11) |
возвращает обратный итератор на начало (public функция-элемент) [править] |
(C++11) |
возвращает обратный итератор на конец (public функция-элемент) [править] |
Ёмкость | |
| проверяет, пуст ли контейнер (public функция-элемент) [править] | |
| возвращает количество элементов (public функция-элемент) [править] | |
| возвращает максимально возможное количество элементов (public функция-элемент) [править] | |
Модификаторы | |
| очищает содержимое (public функция-элемент) [править] | |
| вставляет элементы или узлы (начиная с C++17) (public функция-элемент) [править] | |
(C++23) |
вставляет ряд элементов (public функция-элемент) [править] |
(C++11) |
создаёт элемент на месте (public функция-элемент) [править] |
(C++11) |
создаёт элементы на месте, используя подсказку (public функция-элемент) [править] |
| удаляет элементы (public функция-элемент) [править] | |
| обменивает содержимое (public функция-элемент) [править] | |
(C++17) |
извлекает узлы из контейнера (public функция-элемент) [править] |
(C++17) |
сливает с узлами из другого контейнера (public функция-элемент) [править] |
Поиск | |
| возвращает количество элементов, соответствующих определённому ключу (public функция-элемент) [править] | |
| ищет элемент с определённым ключом (public функция-элемент) [править] | |
(C++20) |
проверяет, содержит ли контейнер элемент с определённым ключом (public функция-элемент) [править] |
| возвращает диапазон элементов, соответствующих определённому ключу (public функция-элемент) [править] | |
| возвращает итератор на первый элемент не меньший, чем заданный ключ (public функция-элемент) [править] | |
| возвращает итератор на первый элемент больший, чем заданный ключ (public функция-элемент) [править] | |
Наблюдатели | |
| возвращает функцию, сравнивающую ключи (public функция-элемент) [править] | |
| возвращает функцию, которая сравнивает ключи в объектах типа value_type (public функция-элемент) [править] | |
Функции, не являющиеся элементами
Примечание
Типы элементы iterator и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегруженных функций с использованием этих двух типов в качестве типов параметров может нарушить Правило Одного Определения. Поскольку iterator можно преобразовать в const_iterator, будет работать одна функция с типом параметра const_iterator.
| Макрос тест функциональности | Значение | Стандарт | Комментарий |
|---|---|---|---|
__cpp_lib_containers_ranges |
202202L |
(C++23) | Создание и вставка диапазонов для контейнеров |
Пример
Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 103 | C++98 | итератор позволяет модифицировать ключи | итератор сделан константным |
| LWG 230 | C++98 | Key не обязательно должен быть CopyConstructible(ключ типа Key может быть не создан)
|
Key также должен быть CopyConstructible
|