自定义排序向量 2d c++17 发送回
custom sort a vector 2d c++17 send to back
我知道我们可以使用 c++17
对 std::vector 进行排序
但我想自定义这个
目前,我正在这样做,v 是 vector<vector<int>>
v=[[10,125],[2,13],[3,2],[1,2]]
我想根据两个数字的总和对这个 2d 向量进行排序,我还想将这些对发送到向量的末尾,该向量的第一个索引高于第二个索引,即如果 a[i][0]>a[i][1] send this pair to back/end of vector.
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);
});
我知道我们可以使用 c++17
对 std::vector 进行排序但我想自定义这个
目前,我正在这样做,v 是 vector<vector<int>>
v=[[10,125],[2,13],[3,2],[1,2]]
我想根据两个数字的总和对这个 2d 向量进行排序,我还想将这些对发送到向量的末尾,该向量的第一个索引高于第二个索引,即如果 a[i][0]>a[i][1] send this pair to back/end of vector.
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);
});