Ordenar una matriz basada en una matriz de índice en C

Estoy tratando de ordenar muchas matrices en paralelo. Ordeno una matriz por qsort y devuelvo una matriz int que especifica los índices de sus posiciones originales. Ahora, con esta matriz int, necesito ordenar otras matrices.

Array 1:

zzz yyy def abc cde xxx 

después de ordenar, obtengo la matriz de índice y la matriz ordenada: matriz de posición Idx

 3 : abc 4 : cde 2 : def 5 : xxx 1 : yyy 0 : zzz 

Ahora basado en esta matriz de índice, necesito ordenar otra matriz

 a b c d e f 

para que se convierta

 d e c f b a 

Muchas gracias

 for (i=0; i < 6; ++i) SortedArray[IndexArray[i]] = AnotherArray[i]; 

Este código aquí muestra dos formas de hacer esto:

La primera manera lo hace usando un qsort () .. en C puro pero consume un poco más de memoria

 struct pair { int distance; int index; }; int my_pair_compare(const void *const first, const void *const second) { const pair* a = (const pair*)first; const pair* b = (const pair*)second; if (a->distance > b->distance) return 1; else if (a->distance < b->distance) return -1; else return 0; } void calculate_new_order1(int week_count, float distances[], int new_order[]) { struct pair ab[week_count]; for (int i = 0; i 

Los segundos guardan las distancias (en mi ejemplo) en un mapa, y luego iteran sobre el mapa. Una forma de C ++.

 void calculate_new_order2(int week_count, float distances[], int new_order[]) { std::map ooo; for (int week=0; weeksecond; t++; } } 

El problema con la segunda solución es que si tiene dos "semanas" con la misma distancia, esto fallará, ya que los valores se guardan en el mismo índice de mapa.