2011-08-25 232 views
0

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

+0

你想排序一个容器,其中每个元素是一个元组,或者你想排序一个单独的元组? –

+0

并假设您想对首先排列的列表进行排序,<2,2,2,2>或<3,1,1,1>? – Beta

回答

6

您可以按照您希望使用现有的C++排序例程“之类的”东西,仅通过定义自己的比较函数,比如,对于你的情况

sort(mytuplearray, mytuplearray + N, mycomp) 

其中mycomp是

bool mycomp(tuple& a, tuple& b) 
{ 
    //compare however you like 
} 
+1

你甚至可以使用元组的默认值,这是字典学比较,这很可能是这种情况下想要的。 –

+0

我认为你想为'mycomp'参数使用'const tuple'。 –

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())); 
+1

运算符<'为元组重载以完成这件事。 –

+0

我还没有使用boost :: Tuple,所以不确定它们可以为它们的元素提供比较函数。毕竟,Arya想重用任意整数比较(据我所知)。 –