如何使用现有的整数排序对整数元组进行排序?

Posted

技术标签:

【中文标题】如何使用现有的整数排序对整数元组进行排序?【英文标题】:How to use existing integer sort to sort integer tuples? 【发布时间】:2011-08-25 03:51:04 【问题描述】:

有谁知道使用现有整数排序(例如 STL 排序)对整数元组进行排序而不修改现有整数排序的有效算法。例如。我想对 4 个整数元组的列表进行排序。元组的格式为:<int,int,int, int>。再次假设整数排序只能处理单个整数。

【问题讨论】:

您是要对每个元素都是一个元组的容器进行排序,还是要对单个元组进行排序?? 假设您要对列表进行排序,首先是 还是 ? 【参考方案1】:

您可以使用现有的 C++ 排序例程“排序”对您想要的任何内容进行排序,只需定义您自己的比较函数,例如在您的情况下

sort(mytuplearray, mytuplearray + N, mycomp)

mycomp 在哪里

bool mycomp(tuple& a, tuple& b)

     //compare however you like

【讨论】:

您甚至可以对元组使用默认值,这是一种按字典顺序进行的比较,在这种情况下,这很可能是人们想要的。 我认为您希望 const tuple& 用于 mycomp 参数。【参考方案2】:

如果您想使用标量比较器创建字典元组比较器,只需比较最后一对不相等的组件即可。像这样的:

template<typename T>
class LexicographicCompare

private:

    T Compare;

public:

    LexicographicCompare(T Compare) : Compare(Compare)
    
    

    bool operator()
        ( const tuple<int, int, int> & a
        , const tuple<int, int, int> & b
        ) const
    
        if (a[0] != b[0])
            return Compare(a[0], b[0]);
        if (a[1] != b[1])
            return Compare(a[1], b[1]);
        return Compare(a[2], b[2]);
    
;

sort(tuples.begin(), tuples.end(), LexicographicCompare(IntCompare()));

【讨论】:

operator&lt; 重载了元组来做这件事。 我没有使用 boost::Tuple,所以不确定他们是否可以为他们的元素使用比较函数。毕竟,Arya 想要重用任意整数比较(据我所知)。

以上是关于如何使用现有的整数排序对整数元组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

对有符号整数内的元组进行排序

对大型数组进行排序时出现快速排序错误

在 C# 中对整数三元组数组进行排序

如何按整数属性对类列表进行排序? [复制]

非负整数的基数排序(按位)

如何按日期时间和整数对光标进行排序