double の配列の配列として表されるデータ ポイントのセットがあるとします。
double **data;
ここで、各データ ポイントの一部のフィールド、たとえば 2番目のフィールドでデータを並べ替えたい場合は、次のようなコンパレータを記述します。
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;
}
を使用qsort
して、2番目のフィールドで並べ替えます。
私の質問は、並べ替えたいフィールドを事前に知らない場合、これをどのように一般化するかです。場合によっては1番目のフィールドで並べ替え、場合によっては 5番目のフィールドで並べ替えたい場合もあります。また、スレッド セーフにしたいので、並べ替えるフィールドを追跡するためにグローバル変数を使用したくありません。これらの複数が同時に進行する可能性があるためです。
C++ では、カスタムの並べ替えクラスを使用し、そのクラスにインスタンス変数を使用して、並べ替えるフィールドを追跡します。Cでこのようなことをする方法がわかりません。