CPP有关去重的疑惑

我知道unique和erase可以用来去重,如果vector的元素是int类型的,这个我是会的;
现在碰到了一个问题,就是vector的元素还是vector,但是vector的vector的元素是int类型
如下

[[1,2,3,4],[2,3,1,4],[4,5,6,7]]

请问要通过什么操作才能实现去重?定义这里的去重指的是把组成元素相同的vector给去掉,比如这里的
前两个vector就属于相同的vector

你要把里面的元素取出来,再建一个新的vector,把元素放进去
如下是去重的简单例子,参考一下

/*********************************************************************************
Copyright(C),Your Company

Description:c++ vector 元素去重
unique的使用
Others:
**********************************************************************************/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
int main()
{
    vector<int> vec{ 3,4,5,1,2,5,3 };
    sort(vec.begin(), vec.end());
 
    // pos是去重以后vector中没有重复元素的下一个位置的迭代器。
    auto pos = unique(vec.begin(), vec.end());
 
    //去重后整个容器
    for(auto v : vec)
        cout << v << ' ';
    cout << endl; // 1 2 3 4 5 5 5
 
    for(auto iter = vec.begin(); iter < pos; iter++)
        cout << *iter << ' ';
    cout << endl; // 1 2 3 4 5
 
    vec.erase(pos, vec.end()); // erase()擦除无意义的部分
 
    return 0;
}


自定义比较运算为将vector转为set后比较

#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
struct {
    int operator()(vector<int> a, vector<int> b)
    {
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        set<int> sta(a.begin(), a.end());
        set<int> stb(b.begin(), b.end());
        int r=0;
        for (auto ita = sta.begin(),
                  itb = stb.begin();
                  ita != sta.end(),
                  itb != stb.end();
                  ++ita,
                  ++itb) {
            r = (*ita - *itb);
            if (r) break;
        }
        return r;
    }
} vector_int_compare;
struct {
    bool operator()(vector<int> a, vector<int> b)
    {
        sort(a.begin(), a.end());
        sort(b.begin(), b.end());
        set<int> sta(a.begin(), a.end());
        set<int> stb(b.begin(), b.end());
        int r=0;
        for (auto ita = sta.begin(),
                  itb = stb.begin();
                  ita != sta.end(),
                  itb != stb.end();
                  ++ita,
                  ++itb) {
            r = (*ita - *itb);
            if (r) break;
        }
        return r==0;
    }
} vector_int_equal;
int main()
{
    vector<vector<int> > v {{1,2,3,4},{2,3,1,4},{4,5,6,7}};
    sort(v.begin(), v.end(), vector_int_compare);
    auto last = unique(v.begin(), v.end(), vector_int_equal);
    v.erase(last, v.end());
    sort(v.begin(), v.end(), vector_int_compare);
    for (vector<int> vi : v) {
        for (int i : vi) {
            cout << i << " ";
        }
        cout << endl;
    }
    cout << endl;
    return 0;
}
//1 2 3 4
//4 5 6 7
//


穷举呗,先把数组0去重,在拿数组0中元素给之后的数组去重,再给数组1去重,在拿数组1给以后的数组去重,重复