Как отсортировать массив пар на основе большего значения в первом или втором

bool custome_compare(const pair<int, int>& p1, const pair<int, int>& p2){
if (p1.first > p1.second || p1.second > p1.first) return true;
else return false;
}
int main()
{
pair<int, int> arr[4];
arr[0].first = 4, arr[0].second = 10;
arr[1].first = 7, arr[1].second = 6;
arr[2].first = 3, arr[2].second = 8;
arr[3].first = 9, arr[3].second = 1;

sort(arr, arr + 4 , custome_compare);
//---------------------------------------
return 0;
}

Моя цель отсортировать массив пар на основе большего значения.
Меня не волнует, чем больше значение первого или второго элемента в паре.

Например, у меня есть эти пары:

4,10
7,6
3,8
9,1

После сортировки их:

4,10
9,1
3,8
7,6

Так что я не сортирую на основе первого или второго я сортирую на основе обоих.

Как я могу отредактировать эту функцию сравнения для выполнения этой задачи?

Заранее спасибо.

0

Решение

Похоже, вы хотите сравнить максимум из двух пар.

bool custom_compare(const pair<int, int>& p1, const pair<int, int>& p2){
return std::max(p1.first, p1.second) < std::max(p2.first, p2.second);
}
1

Другие решения

Пользовательская функция сравнения должна сравнивать максимальное значение пары. Так что-то вроде:

bool custom_compare(pair<int, int> i, pair<int, int> j) { return max(i.first,
i.second) > max(j.first, j.second); }

Не проверял и не пытался скомпилировать, но я надеюсь, что вы можете решить это отсюда.

1

Вот ты где

bool custome_compare(const std::pair<int, int> &p1, const std::pair<int, int> &p2)
{
return std::max( p1.first, p1.second ) > std::max( p2.first, p2.second );
}

Вот демонстрационная программа

#include <iostream>
#include <utility>
#include <algorithm>
#include <iterator>

bool custome_compare(const std::pair<int, int> &p1, const std::pair<int, int> &p2)
{
return std::max( p1.first, p1.second ) > std::max( p2.first, p2.second );
}

int main()
{
std::pair<int, int> arr[] =
{
{ 4, 10 }, { 7, 6 }, { 3, 8 }, { 9, 1 }
};for ( const auto &p : arr )
{
std::cout << p.first << ", " << p.second << '\n';
}

std::cout << std::endl;

std::sort( std::begin( arr ), std::end( arr ), custome_compare );

for ( const auto &p : arr )
{
std::cout << p.first << ", " << p.second << '\n';
}

std::cout << std::endl;

return 0;
}

Его вывод

4, 10
7, 6
3, 8
9, 1

4, 10
9, 1
3, 8
7, 6
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector