2012-04-17 467 views
6

我想知道他們是否是stl或Qt中的某種算法,它對double數組進行排序並返回原始列表中排序項目的索引。例如, L = 1,2,5,3 L_sort = 1,2,3,5個 指數= 1,2,4,3使用Qt/C++排序算法 - 排序結構的QList結構

所以,我可以事後計算AnotherList [指數](以相同的順序在兩個盛行列表,相對於原始列表L)。最後,我想創建一個QList,每個MyStruct包含兩個成員,一個與L中的元素類型相同,另一個與AnotherList中的元素類型相同。然後針對LType類型的成員進行排序。但是我有這個想法,我不知道如何在Qt中繼續。

感謝和問候

+0

我不能想到用這個! – 2012-04-17 10:49:37

回答

9

您可以存儲與對指數... 首先排序值,用指數第二類數據...

QList<QPair<LType,int> > array; 
for (int i = 0; i < 100; i++) 
{ 
    LType x = ... 
    array.append(qMakePair(x,i)); 
} 

// Ordering ascending 
qSort(array.begin(), array.end(), QPairFirstComparer()); 

..... 

// Restoring start order 
qSort(array.begin(), array.end(), QPairSecondComparer()); 

你只需要這些類:

struct QPairFirstComparer 
{ 
    template<typename T1, typename T2> 
    bool operator()(const QPair<T1,T2> & a, const QPair<T1,T2> & b) const 
    { 
     return a.first < b.first; 
    } 
}; 

struct QPairSecondComparer 
{ 
    template<typename T1, typename T2> 
    bool operator()(const QPair<T1,T2> & a, const QPair<T1,T2> & b) const 
    { 
     return a.second < b.second; 
    } 
};