2012-04-17 4 views
6

stl이나 Qt에서 double 배열을 정렬하고 정렬 된 항목의 인덱스를 원래 목록에 반환하는 알고리즘인지 궁금합니다. 예 : L = 1, 2, 5, 3 L_sort = 1, 2, 3, 5 개 지수 = 1, 2, 4, 그래서 이후 AnotherList는 [지수 (동일한 순서가 모두 우선 계산할 수 3Qt/C++로 알고리즘 정렬하기 - 구조체의 QList 정렬하기

목록, 원래 목록 L).

결국 나는 QList를 만들려고 생각했다. 각 MyStruct는 L에있는 요소와 동일한 유형 LType 중 하나와 AnotherList의 AnotherType 중 하나 인 AnotherList의 두 멤버를 포함한다. 그런 다음 LType 유형의 멤버와 관련하여 정렬합니다. 그러나 나는이 아이디어를 가지고 있으며 Qt를 어떻게 진행할 지 제대로 알지 못합니다.

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

감사와 안부

+0

나는 이것에 사용을 생각하지 않는다 !! –

답변

9

당신은 쌍으로 인덱스 ... 값을 기준으로 먼저 정렬 인덱스에 의해 두 번째 종류와 데이터를 저장할 수 있습니다 ... 당신은 이러한 클래스가 필요합니다

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; 
    } 
};