Как конвертировать std::vector в std::set без потери порядка

Я использую приведенный ниже код для конвертации:

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

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

2 ответа

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

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

Возможно, вы захотите посмотреть: Как удалить дубликаты из несортированного std::vector, сохраняя при этом исходный порядок с использованием алгоритмов?

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

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

Другие вопросы по тегам