C++ 自定义排序向量2dc++;17寄回
我知道我们可以使用c++17对std::vector进行排序 但是我想定制这个 目前,我正在做这个,v是向量 我想根据两个数字的总和对这个2d向量进行排序,我还想将这些对发送到向量的末尾,该向量的第一个索引高于第二个索引,即如果C++ 自定义排序向量2dc++;17寄回,c++,stl,C++,Stl,我知道我们可以使用c++17对std::vector进行排序 但是我想定制这个 目前,我正在做这个,v是向量 我想根据两个数字的总和对这个2d向量进行排序,我还想将这些对发送到向量的末尾,该向量的第一个索引高于第二个索引,即如果a[I][0]>a[I][1],则将这对发送到向量的后面/末尾。 std::sort(v.begin(),v.end(),[](const vector<int> &a,const vector<int> &b){
a[I][0]>a[I][1],则将这对发送到向量的后面/末尾。
std::sort(v.begin(),v.end(),[](const vector<int> &a,const vector<int> &b){
if(a[0]>a[1]){
//send to back
}
if((a[0]+a[1])<(b[0]+b[1])){
return 1;
}else{
return 0;
}
});
我发现下面的风格更容易推理。按照重要性的顺序,您给出了两条规则:
std::sort(v.begin(),v.end(),[](std::vector&lhs,std::vector&rhs){
常数int lhs_sum=lhs[0]+lhs[1];
常量int lhs_order=lhs[0]>lhs[1];
常数int rhs_sum=rhs[0]+rhs[1];
常量int rhs_order=rhs[0]>rhs[1];
返回std::tie(左S_顺序,左S_总和)
您的代码有几个问题。1) 比较器应返回true
如果a
应被视为小于b
,则不应返回较小的元素。2) 你所描述的不是严格的弱序,因为其中一个条件只依赖于一个元素。排序应该比较元素。如果您只需要执行两个规则,那么排序会产生影响吗?@Casey:std::make_-pair
。
std::sort(v.begin(),v.end(),[](const vector<int> &a,const vector<int> &b){
if(a[0]>a[1]){
//send to back
}
if((a[0]+a[1])<(b[0]+b[1])){
return 1;
}else{
return 0;
}
});
v=[[1,2],[2,13],[10,125],[3,2]]
std::sort(v.begin(), v.end(), [](std::vector<int> &lhs, std::vector<int> &rhs) {
const int lhs_sum = lhs[0] + lhs[1];
const int lhs_order = lhs[0] > lhs[1];
const int rhs_sum = rhs[0] + rhs[1];
const int rhs_order = rhs[0] > rhs[1];
return std::tie(lhs_order, lhs_sum) < std::tie(rhs_order, rhs_sum);
});