2016-01-26 2 views
3

Я использую следующий код для преобразования:как преобразовать зЬй :: вектора StD :: установить без потери порядка

std::set<ObjectType> s(v.begin(), v.end()); 

Однако, мне нужно, чтобы сохранить порядок элементов вектора. Как я могу это сделать?

+3

* Только причина * использовать «комплект», это то, что он * приказал *. Если вы хотите сохранить порядок элементов в 'vector', вы должны сохранить элементы в' vector'. –

+1

'std :: unique' может считаться нужным вместо' std :: set'. – Jarod42

+1

@ Jarod42 Я был склонен предположить, что, но 'std :: unique' требует сортировки контейнера. – NathanOliver

ответ

3

Вы не можете, если вектор не заказан. A std::set сохраняет его содержимое в порядке возрастания или убывания.

Если вектор заказан, вам просто нужно установить функцию сравнения std::set на то, что было использовано для заказа вектора.

Вы можете увидеть: How to remove duplicates from unsorted std::vector while keeping the original ordering using algorithms?

2

Вы можете сделать это, если и только если ваш vector отсортирован по некоторым строгим слабый порядок, например, отсортировано по < для цифр. В этом случае дайте set подходящий объект сравнения (тот, который вы использовали для сортировки vector), и порядок будет соответствовать.

В противном случае, если ваш vector не был отсортирован по примерочному критерию, вы не можете сделать set сохранить первоначальный порядок, как сортировка элементов является один из инвариантов set.