std::set
| Определено в заголовочном файле <set>
|
||
| template< class Key, |
(1) | |
| namespace pmr { template <class Key, class Compare = std::less<Key>> |
(2) | (начиная с C++17) |
std::set это ассоциативный контейнер, содержащий отсортированный набор уникальных объектов типа Key. Сортировка выполняется с помощью функции сравнения ключей Compare. Операции поиска, удаления и вставки имеют логарифмическую сложность. Данный тип обычно реализуется как красно-чёрное дерево.
Везде, где стандартная библиотека использует требования Compare, уникальность определяется с помощью отношения эквивалентности. Выражаясь неточно, два объекта a и b считаются эквивалентными, если ни один из них не меньше, чем другой: !comp(a, b) && !comp(b, a).
std::set соответствует требованиям Container, AllocatorAwareContainer, AssociativeContainer и ReversibleContainer.
Содержание |
[править] Типы элементы
| Тип элемент | Определение | ||||
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
|
Constant LegacyBidirectionalIterator в value_type
| ||||
const_iterator
|
LegacyBidirectionalIterator в const value_type
| ||||
reverse_iterator
|
std::reverse_iterator<iterator> | ||||
const_reverse_iterator
|
std::reverse_iterator<const_iterator> | ||||
node_type (начиная с C++17)
|
специализация дескриптора узла, представляющая узел контейнера | ||||
insert_return_type (начиная с C++17)
|
тип, описывающий результат вставки node_type, специализацияtemplate <class Iter, class NodeType> struct /*неопределена*/ { | ||||
[править] Функции-элементы
создаёт set (public функция-элемент) | |
уничтожает set (public функция-элемент) | |
| присваивает значения контейнеру (public функция-элемент) | |
| возвращает связанный аллокатор (public функция-элемент) | |
Итераторы | |
| (C++11) |
возвращает итератор на начало (public функция-элемент) |
| (C++11) |
возвращает итератор на конец (public функция-элемент) |
| (C++11) |
возвращает обратный итератор на начало (public функция-элемент) |
| (C++11) |
возвращает обратный итератор на конец (public функция-элемент) |
Ёмкость | |
| проверяет, пуст ли контейнер (public функция-элемент) | |
| возвращает количество элементов (public функция-элемент) | |
| возвращает максимально возможное количество элементов (public функция-элемент) | |
Модификаторы | |
| очищает содержимое (public функция-элемент) | |
| вставляет элементы или узлы (начиная с C++17) (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 функция-элемент) | |
[править] Функции, не являющиеся элементами
| (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (убрано в C++20) (C++20) |
лексикографически сравнивает значения в set (шаблон функции) |
| специализация алгоритма std::swap (шаблон функции) | |
| (C++20) |
Стирает все элементы, соответствующие определённым критериям (шаблон функции) |
[править] Принципы вывода (начиная с C++17)
[править] Примечание
Типы элементы iterator и const_iterator могут быть псевдонимами одного и того же типа. Это означает, что определение пары перегруженных функций с использованием этих двух типов в качестве типов параметров может нарушить Правило Одного Определения. Поскольку iterator можно преобразовать в const_iterator, будет работать одна функция с типом параметра const_iterator.
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
| Номер | Применён | Поведение в стандарте | Корректное поведение |
|---|---|---|---|
| LWG 103 | C++98 | итератор позволяет изменять ключи | итератор сделан константным |

