Пространства имён
Варианты
Действия

std::set

Материал из cppreference.com
< cpp‎ | container
 
 
 
std::set
Функции-элементы
Итераторы
Ёмкость
Модификаторы
(C++17)
Просмотр
Наблюдатели
Функции, не являющиеся элементами
(C++20)
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Принципы вывода (C++17)
 
Определено в заголовочном файле <set>
template<

    class Key,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<Key>

> class set;
(1)
namespace pmr {

    template<
        class Key,
        class Compare = std::less<Key>
    > using set = std::set<Key, Compare, std::pmr::polymorphic_allocator<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
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 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 /*неопределена*/ {
    Iter     position;
    bool     inserted;
    NodeType node;
};

создаётся с аргументами шаблона iterator и node_type. [править]

[править] Функции-элементы

создаёт set
(public функция-элемент) [править]
уничтожает set
(public функция-элемент) [править]
присваивает значения контейнеру
(public функция-элемент) [править]
возвращает связанный аллокатор
(public функция-элемент) [править]
Итераторы
возвращает итератор на начало
(public функция-элемент) [править]
(C++11)
возвращает итератор на конец
(public функция-элемент) [править]
возвращает обратный итератор на начало
(public функция-элемент) [править]
возвращает обратный итератор на конец
(public функция-элемент) [править]
Ёмкость
проверяет, пуст ли контейнер
(public функция-элемент) [править]
возвращает количество элементов
(public функция-элемент) [править]
возвращает максимально возможное количество элементов
(public функция-элемент) [править]
Модификаторы
очищает содержимое
(public функция-элемент) [править]
вставляет элементы или узлы (начиная с C++17)
(public функция-элемент) [править]
вставляет ряд элементов
(public функция-элемент) [править]
(C++11)
создаёт элемент на месте
(public функция-элемент) [править]
создаёт элементы на месте, используя подсказку
(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++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 не обязательно должен быть CopyConstructible (ключ
типа Key может быть не создан)
Key также должен быть CopyConstructible