C++ 如何在向量的向量上进行排序和应用唯一性?

C++ 如何在向量的向量上进行排序和应用唯一性?,c++,sorting,vector,unique,C++,Sorting,Vector,Unique,我只需要在向量中保留唯一的数组。我不知道如何使用std算法来实现它。我尝试了不同的方法,但没有任何效果 代码: 有人能帮我解决这个问题吗 提前感谢使用std::set应该可以解决您的问题 std::set<vec3> s{vec.begin(),vec.end()}; vec.assign(s.begin(),s.end()); std::set s{vec.begin(),vec.end()}; 向量赋值(s.begin(),s.end()); 您还可以在中添加一个自定义比较类

我只需要在向量中保留唯一的数组。我不知道如何使用std算法来实现它。我尝试了不同的方法,但没有任何效果

代码:

有人能帮我解决这个问题吗


提前感谢

使用std::set应该可以解决您的问题

std::set<vec3> s{vec.begin(),vec.end()};
vec.assign(s.begin(),s.end());
std::set s{vec.begin(),vec.end()};
向量赋值(s.begin(),s.end());
您还可以在
中添加一个自定义比较类作为模板参数,该类删除所有相同的连续元素,因此在排序后,使用该类删除所有多余元素非常简单

因此,您的代码可能如下所示

std::vector<std::array<int,3>>vec;
    
vec.push_back({1,2,3});
vec.push_back({1,3,2});
vec.push_back({1,2,3});
//and so on


std::sort(vec.begin(),vec.end(),mycomp);

//make all elements unique
auto it = std::unique(vec.begin(), vec.end());
vec.erase(it, a.end());

for(auto i(0);i<vec.size();++i){
     std::cout<<vec.at(i)[0]<<" "<<vec.at(i)[1]<<" "<<vec.at(i)[2]<<std::endl;
}

std::cout<<vec.size()<<std::endl;
std::vectorvec;
向量推回({1,2,3});
向量推回({1,3,2});
向量推回({1,2,3});
//等等
std::sort(vec.begin()、vec.end()、mycop);
//使所有元素都独一无二
auto it=std::unique(vec.begin(),vec.end());
向量擦除(it,a.end());

用于(自动i(0);i@m88首先,我需要确保正确完成排序。在应用unique之前。在我的情况下,排序没有正确完成。您的
vec3comp
错误(不尊重)(而默认值是)。与
std::set<vec3> s{vec.begin(),vec.end()};
vec.assign(s.begin(),s.end());
std::vector<std::array<int,3>>vec;
    
vec.push_back({1,2,3});
vec.push_back({1,3,2});
vec.push_back({1,2,3});
//and so on


std::sort(vec.begin(),vec.end(),mycomp);

//make all elements unique
auto it = std::unique(vec.begin(), vec.end());
vec.erase(it, a.end());

for(auto i(0);i<vec.size();++i){
     std::cout<<vec.at(i)[0]<<" "<<vec.at(i)[1]<<" "<<vec.at(i)[2]<<std::endl;
}

std::cout<<vec.size()<<std::endl;