如何根据第一个或第二个中的较大值对对数组进行排序

Posted

技术标签:

【中文标题】如何根据第一个或第二个中的较大值对对数组进行排序【英文标题】:How do I sort array of pairs based on the greater value in first or second 【发布时间】:2017-12-07 18:53:58 【问题描述】:
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

所以我不是基于第一个或第二个排序,而是基于两者排序。

如何编辑此比较功能来执行此任务?

提前致谢。

【问题讨论】:

【参考方案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

【讨论】:

【参考方案2】:

听起来你想比较两对的最大值。

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

【讨论】:

【参考方案3】:

自定义比较功能应该比较对的最大值。所以像:

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

没有测试,也没有尝试编译,但我希望你能从这里解决问题。

【讨论】:

就像 colopop 在我输入答案时回答的那样 :-) 并且使用 const & 引用有更好的版本。

以上是关于如何根据第一个或第二个中的较大值对对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何根据对的第二个元素对对的向量进行排序?

java排序之冒泡排序和选择排序

如何按第一个值和第二个值对 pair<int, char> 的向量进行排序? [复制]

jquery根据geoIP隐藏第一个或第二个子元素

您如何在 F# 或任何函数式语言中对第二个(或第三个、第四个、...)参数进行 curry?

根据相邻列值 Pandas 从列中按第一个或第二个空格提取字符串