Предположим, у меня есть некоторые данные, хранящиеся в контейнере unique_ptr
s:
struct MyData {
int id; // a unique id for this particular instance
data some_data; // arbitrary additional data
};
// ...
std::vector<std::unique_ptr<MyData>> my_data_vec;
Порядок my_data_vec
важен.Предположим, теперь у меня есть другой вектор идентификаторов MyDatas:
std::vector<int> my_data_ids;
Теперь я хочу переставить my_data_vec
так, чтобы элементы были в последовательности, указанной my_data_ids
.(Не забудьте, что для перемещения unique_ptr
требуется семантика перемещения с помощью std::move()
.)
Какой наиболее алгоритмически эффективный способ добиться этого, и подойдет ли какой-либо из алгоритмов STL для достижения этой цели?Я не вижу, чтобы std::sort
помог бы.
Редактировать: Я могу использовать O (n) памяти (не слишком беспокоюсь о памяти), но идентификаторы произвольные (в моем конкретном случае онина самом деле генерируются случайным образом).