C++ 自定义排序向量2dc++;17寄回

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){

我知道我们可以使用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){
            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);
    });