2012-04-17 104 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; 
    } 
};