Я знаю, что мы можем отсортировать std :: vector, используя c ++ 17

Но я хочу настроить это

В настоящее время я делаю это, 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]]
1
Rohit gupta 2 Май 2021 в 21:51

1 ответ

Лучший ответ

Мне гораздо легче рассуждать о следующем стиле. Вы дали два правила в порядке важности:

  1. Пары с определенным порядком должны быть первыми.
  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);
});
1
Bill Lynch 2 Май 2021 в 20:31