Spec-Zone.ru › C++

std::multiset

Определено в заголовке <set>
template<
    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>
> class multiset;
(1)
namespace pmr {
    template<
        class Key,
        class Compare = std::less<Key>
    > using multiset = std::multiset<Key, Compare, std::pmr::polymorphic_allocator<Key>>;
}
(2) (с C++17)

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

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

Порядок элементов, которые сравниваются как эквивалентные, соответствует порядку вставки и не изменяется.

(с C++11)

std::multiset удовлетворяет требованиям Контейнера, Контейнера с учётом аллокатора, Ассоциативного контейнера и Обратимого контейнера.

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

Типы членов

Тип члена Определение
key_type Key
value_type Key
size_type Беззнаковый целочисленный тип (обычно std::size_t)
difference_type Знаковый целочисленный тип (обычно std::ptrdiff_t)
key_compare Compare
value_compare Compare
allocator_type Allocator
reference value_type&
const_reference const value_type&
pointer
Allocator::pointer (до C++11)
std::allocator_traits<Allocator>::pointer (с C++11)
const_pointer
Allocator::const_pointer (до C++11)
std::allocator_traits<Allocator>::const_pointer (с C++11)
iterator Постоянный двунаправленный итератор к value_type
const_iterator Двунаправленный итератор к const value_type
reverse_iterator std::reverse_iterator<iterator>
const_reverse_iterator std::reverse_iterator<const_iterator>
node_type (с C++17) специализация обработчика узлов, представляющая узел контейнера

Члены-функции

(конструктор)
создаёт multiset
(публичный член-функция)
(деструктор)
удаляет multiset
(публичный член-функция)
operator=
присваивает значения контейнеру
(публичный член-функция)
get_allocator
возвращает связанный аллокатор
(публичный член-функция)
Итераторы
begincbegin
(C++11)
возвращает итератор к началу
(публичный член-функция)
endcend
(C++11)
возвращает итератор к концу
(публичный член-функция)
rbegincrbegin
(C++11)
возвращает обратный итератор к началу
(публичный член-функция)
rendcrend
(C++11)
возвращает обратный итератор к концу
(публичный член-функция)
Ёмкость
empty
проверяет, пустой ли контейнер
(публичный член-функция)
size
возвращает количество элементов
(публичный член-функция)
max_size
возвращает максимальное возможное количество элементов
(публичный член-функция)
Модификаторы
clear
очищает содержимое
(публичный член-функция)
insert
вставляет элементы или узлы(с C++17)
(публичный член-функция)
insert_range
(C++23)
вставляет диапазон элементов
(публичный член-функция)
emplace
(C++11)
создаёт элемент на месте
(публичный член-функция)
emplace_hint
(C++11)
создаёт элементы на месте с подсказкой
(публичный член-функция)
erase
удаляет элементы
(публичный член-функция)
swap
меняет местами содержимое
(публичный член-функция)
extract
(C++17)
извлекает узлы из контейнера
(публичный член-функция)
merge
(C++17)
вставляет узлы из другого контейнера
(публичный член-функция)
Поиск
count
возвращает количество элементов, соответствующих заданному ключу
(публичный член-функция)
find
находит элемент с заданным ключом
(публичный член-функция)
contains
(C++20)
проверяет, содержит ли контейнер элемент с заданным ключом
(публичный член-функция)
equal_range
возвращает диапазон элементов, соответствующих заданному ключу
(публичный член-функция)
lower_bound
возвращает итератор на первый элемент, не меньший, чем заданный ключ
(публичный член-функция)
upper_bound
возвращает итератор на первый элемент, больший, чем заданный ключ
(публичный член-функция)
Наблюдатели
key_comp
возвращает функцию сравнения ключей
(публичный член-функция)
value_comp
возвращает функцию сравнения ключей в объектах типа value_type
(публичный член-функция)

Нечленённые функции

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

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

(с C++17)

Примечания

Типы членов 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 не требовалось быть копируемым
(ключ типа Key мог быть не создан)
Key также должно быть
копируемым

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

Spec-Zone.ru

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