2012-04-17 7 views
6

Mi chiedo se si tratti di un algoritmo in stl o in Qt che ordina una matrice di double e restituisce gli indici di elementi ordinati nell'elenco originale. Es. L = 1, 2, 5, 3 L_sort = 1, 2, 3, 5 Indici = 1, 2, 4, 3Algoritmo di ordinamento con Qt/C++ - ordina una QList di struct

modo che possa poi calcolare AnotherList [Indici] (lo stesso ordine prevale sia liste, rispetto alla lista originale L).

Alla fine, ho pensato di creare una QList, ogni MyStruct contenente due membri, uno dello stesso tipo LType come elementi in L, l'altro dello stesso tipo AnotherType come elementi in AnotherList. E poi ordinando rispetto ai membri di tipo LType. Comunque ho questa idea, non so bene come procedere in Qt.

Grazie e saluti

+0

non posso pensare a un uso con questo !! –

risposta

9

È possibile memorizzare i dati con gli indici a due a due ... Ordina valori, secondo ordina per indici ...

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

Hai solo bisogno di queste classi:

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