Decir que tengo un conjunto de puntos de datos que se representan como una matriz de matrices de dobles, por loOrdenar una matriz de matrices de diferentes índices en C
double **data;
Ahora si quería ordenar los datos por parte de la algún campo en cada uno de los puntos de datos, por ejemplo en el campo 2 nd , yo escribiría un comparador que hacer algo como:
int compare_data_second_field(void *a, void *b) {
double da = ((double *) a)[1];
double db = ((double *) b)[1];
if (da < db) return -1;
else if (da > db) return 1;
return 0;
}
y luego usar qsort
para ordenarlos por la 2 ª fi vejez.
Mi pregunta es ¿cómo generalizo esto si no sé de antemano en qué campo quiero ordenar? Al igual que me gustaría ordenar por el campo 1 st a veces y el campo 5 th a veces, etc. También me gustaría que sea seguro para subprocesos, por lo que no quiero usar una variable global para realizar un seguimiento de lo campo para ordenar por que varios de estos pueden ir a la vez.
En C++ solo usaría una clase de clasificación personalizada y una variable de instancia en la clase para realizar un seguimiento de qué campo ordenar. No sé cómo hacer algo como esto en C.
En realidad está agarrando el tercer elemento. ¿Estás consciente de esto? –
Actualmente es 'doble ** datos;' no 'datos dobles **;' –
Editado para ambos.Si bien son ciertos, son totalmente irrelevantes para la discusión y realmente no agregan nada, pero lo que sea. – pjreddie