2012-04-17 4 views
6

Ich frage mich, ob es sich um einen Algorithmus in stl oder in Qt handelt, der ein Array von double sortiert und die Indizes sortierter Elemente in der ursprünglichen Liste zurückgibt. Eg. L = 1, 2, 5, 3 L_sort = 1, 2, 3, 5 Indices = 1, 2, 4, 3Sortieralgorithmus mit Qt/C++ - sortiere eine QList der Struktur

Damit ich AnotherList danach berechnen kann [Indices] (die gleiche Reihenfolge in sowohl vorherrscht Listen, in Bezug auf die ursprüngliche Liste L).

Am Ende dachte ich über die Erstellung einer QList, jede MyStruct enthält zwei Mitglieder, eine der gleichen Typ LType als Elemente in L, die andere des gleichen Typs AnotherType als Elemente in AnotherList. Und dann in Bezug auf Mitglieder des Typs LType bestellen. Allerdings habe ich diese Idee, ich weiß nicht richtig, wie ich in Qt vorgehen soll.

Danke und Grüße

+0

Ich denke nicht an eine Verwendung mit diesem !! –

Antwort

9

Sie können mit Indizes speichern Daten in Paaren ... zuerst sortieren nach Werten, die zweite Art von Indizes ...

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

Sie müssen nur diese Klassen:

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