Перемещение unique_ptrs из одного вектора в другой

Я хотел бы переместить unique_ptr, сохраненный в несортированном векторе, на другой вектор, который будет содержать отсортированный вектор указателей.

Несомненно, перемещение unique_ptr не приведет к автоматическому стиранию элемента в первом векторе? Как я могу это сделать?

Пример того, что я хочу сделать:

std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
    const auto it = find_next_element_to_add_to_sorted(unsorted);
    sorted.push_back( std::move(*it) );
}

Надеюсь, что цель понятна.

UPDATE: мой алгоритм не позволяет сортировать на месте. Если сегодня кто-то чувствует себя хорошо (я не спрашиваю, см. Выше для моего вопроса), не стесняйтесь реализовывать его для этой ситуации и показывать мне. Мне действительно нужно "сортировать по ходу". И я действительно не понимаю, почему движение будет намного дороже.

Ответы

Ответ 1

Ваш код выглядит в основном правильным для меня, за исключением того, что кажется, что вы намерены удалить из unique_ptr из-за несортированного вектора:

std::vector<std::unique_ptr<T> > unsorted, sorted;
// fill the "unsorted" vector
while( unsorted.size() > 0 )
{
    const auto it = find_next_element_to_add_to_sorted(unsorted);
    sorted.push_back( std::move(*it) );
    unsorted.erase(it);
}

После перемещения it относится к перемещенному от unique_ptr и *it == nullptr. Он все еще существует в unsorted, и если это нежелательно, он должен быть явно удален.