std::set::extract
Материал из cppreference.com
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 функция-элемент) |