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 |
|
||||
const_pointer |
|
||||
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 (публичный член-функция) |
|
| присваивает значения контейнеру (публичный член-функция) |
|
| возвращает связанный аллокатор (публичный член-функция) |
|
Итераторы |
|
|
(C++11) | возвращает итератор к началу (публичный член-функция) |
|
(C++11) | возвращает итератор к концу (публичный член-функция) |
|
(C++11) | возвращает обратный итератор к началу (публичный член-функция) |
|
(C++11) | возвращает обратный итератор к концу (публичный член-функция) |
Ёмкость |
|
| проверяет, пустой ли контейнер (публичный член-функция) |
|
| возвращает количество элементов (публичный член-функция) |
|
| возвращает максимальное возможное количество элементов (публичный член-функция) |
|
Модификаторы |
|
| очищает содержимое (публичный член-функция) |
|
| вставляет элементы или узлы(с C++17) (публичный член-функция) |
|
|
(C++23) | вставляет диапазон элементов (публичный член-функция) |
|
(C++11) | создаёт элемент на месте (публичный член-функция) |
|
(C++11) | создаёт элементы на месте с подсказкой (публичный член-функция) |
| удаляет элементы (публичный член-функция) |
|
| меняет местами содержимое (публичный член-функция) |
|
|
(C++17) | извлекает узлы из контейнера (публичный член-функция) |
|
(C++17) | вставляет узлы из другого контейнера (публичный член-функция) |
Поиск |
|
| возвращает количество элементов, соответствующих заданному ключу (публичный член-функция) |
|
| находит элемент с заданным ключом (публичный член-функция) |
|
|
(C++20) | проверяет, содержит ли контейнер элемент с заданным ключом (публичный член-функция) |
| возвращает диапазон элементов, соответствующих заданному ключу (публичный член-функция) |
|
| возвращает итератор на первый элемент, не меньший, чем заданный ключ (публичный член-функция) |
|
| возвращает итератор на первый элемент, больший, чем заданный ключ (публичный член-функция) |
|
Наблюдатели |
|
| возвращает функцию сравнения ключей (публичный член-функция) |
|
возвращает функцию сравнения ключей в объектах типа value_type (публичный член-функция) |
|
Нечленённые функции
|
(удалена в C++20)(удалена в C++20)(удалена в C++20)(удалена в C++20)(удалена в C++20)(C++20) | лексикографически сравнивает значения двух multisets (шаблон функции) |
специализирует алгоритм std::swap (шаблон функции) |
|
|
(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