Как конвертировать 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
,