2011-08-25 140 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想重用任意整數比較(據我所知)。 –