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

std::set::extract

Материал из cppreference.com
< cpp‎ | container‎ | set
 
 
 
std::set
Функции-элементы
Итераторы
Ёмкость
Модификаторы
set::extract
(C++17)
(C++17)
Просмотр
Наблюдатели
Функции, не являющиеся элементами
(C++20)
(до C++20)(до C++20)(до C++20)(до C++20)(до C++20)(C++20)
Принципы вывода (C++17)
 
node_type extract( const_iterator position );
(1) (начиная с C++17)
node_type extract( const key_type& x );
(2) (начиная с C++17)
1) Извлекает узел, который содержит элемент, на который указывает position и возвращаетдескриптор узла которому он принадлежит
2) Если контейнер имеет элемент с ключом, который равен x, то излекает этот элемент из контейнера и возвращаетдескриптор узла, которому он принадлежит. В противном случае, возвращает пустой дескриптор.

В любом случае, элементы не копируются и не перемещаются, только внутренние указатели узлов контейнера переопределяются (может произойти перебалансировка, как с erase())

Извлечение узла делает недействительными итераторы для извлеченного элемента. Указатели и ссылки на извлеченный элемент остаются действительными, но не могут использоваться, пока элемент принадлежит дескриптору узла: они становятся пригодными для использования, если элемент вставлен в контейнер.

Содержание

[править] Параметры

position валидный итератор
x ключ для идентификации извлекаемого узла

[править] Возвращаемое значение

Дескриптор узла, которому принадлежит извлеченный элемент, или пустой дескриптор узла, если элемент не найден в перегрузке (2)

[править] Сложность

1) амортизированная константа
2) log(a.size())

[править] Заметки

extract - единственный способ извлечь только перемещаемый объект из set

set<move_only_type> s;
s.emplace(...);
move_only_type mot = move(s.extract(s.begin()).value());

[править] Пример

[править] См. также

(C++17)
сливает с узлами из другого контейнера
(public функция-элемент) [править]
вставляет элементы или узлы (начиная с C++17)
(public функция-элемент) [править]
удаляет элементы
(public функция-элемент) [править]