c++ - 自定义排序向量 2d c++17 发送到后面
问题描述
我知道我们可以使用 c++17 对 std::vector 进行排序
但我想定制这个
目前,我正在这样做,v 是vector<vector<int>>
v=[[10,125],[2,13],[3,2],[1,2]]
我想根据两个数字的总和对这个二维向量进行排序,我还想将这些对发送到向量的末尾,该向量的第一个索引高于第二个索引,即如果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);
});
推荐阅读
- javascript - 在 JavaScript 中使用函数参数
- python - 初学者 Python 数学路障
- machine-learning - 为什么网络模型平均值可以提高测试集的性能?
- python - 使用 type 代替 cat
- swift - 就字节数据的可变性而言,这是如何工作的?
- postman - 尝试为 API Gateway 设置用户池身份验证
- kubernetes - Kubectl 错误:对象已被修改;请将您的更改应用到最新版本,然后重试
- javascript - 使用 momentjs 格式化当前日期和时间
- jquery - jQuery Collapse 在我的模式中不起作用
- data-binding - 通过定义一对 SerializableFunction 对象来提供一个用于数据绑定的转换器