📜  对向量进行排序后具有唯一向量 - C++ (1)

📅  最后修改于: 2023-12-03 14:53:39.236000             🧑  作者: Mango

对向量进行排序后具有唯一向量 - C++

概述

假设有一个向量 $v=[a_1,a_2,a_3,\cdots,a_n]$,现在要对其进行排序并且保证排序后的向量是唯一的。也就是说,对于任意两个向量 $v_1$ 和 $v_2$,如果 $v_1$ 排序后等于 $v_2$ 排序后,那么 $v_1=v_2$。

思路

目标是让排序后的向量唯一,那么我们可以使用一个 set 容器来存储排序后的向量,由于 set 容器中每个元素都是唯一的,那么存储后的 set 容器也就满足了要求。

具体来说,我们可以遍历原向量 $v$,将每个元素插入到一个 set 容器中,然后将 set 中的元素按顺序插入回一个新的向量中。

C++ STL 中已经提供了 set 和 vector 容器,我们只需使用它们就能轻松实现。

代码

下面是代码实现:

#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

using namespace std;

vector<int> uniqueSort(vector<int>& v) {
    set<int> s(v.begin(), v.end());
    vector<int> res(s.begin(), s.end());
    sort(res.begin(), res.end());
    return res;
}

int main() {
    vector<int> v = {3, 1, 2, 2, 1, 5};
    vector<int> sortedV = uniqueSort(v);

    for (auto i : sortedV) {
        cout << i << " ";
    }
    // Output: 1 2 3 5
    return 0;
}

上述代码先使用 set 容器去重并排序,然后将其插入到 vector 容器中,最后再次排序输出。