2012-04-17 7 views
6

Me pregunto si se trata de algún algoritmo en stl o en Qt que ordena una matriz de doble y devuelve los índices de los elementos ordenados en la lista original. Eg. L = 1, 2, 5, 3 L_sort = 1, 2, 3, 5 Indices = 1, 2, 4, 3Algoritmo de clasificación con Qt/C++ - ordenar una lista Q de struct

De modo que pueda calcular después AnotherList [índices] (el mismo orden prevalece en tanto listas, con respecto a la lista original L).

Al final, pensé en crear una QList, cada MyStruct contenía dos miembros, uno del mismo tipo LType como elementos en L, el otro del mismo tipo AnotherType como elementos en AnotherList. Y luego ordenando con respecto a los miembros del tipo LType. Sin embargo, tengo esta idea, no sé cómo proceder correctamente en Qt.

Gracias y saludos

+0

no puedo pensar en un uso con esto !! –

Respuesta

9

Puede almacenar datos con índices de dos en dos ... primero ordenar por valores, segunda ordenar por índices ...

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

Sólo necesitan estas clases:

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