假设我有一组数据点,它们表示为双精度数组的数组,所以
double **data;
现在,如果我想按每个数据点中的某个字段对数据进行排序,比如第二个字段,我会编写一个比较器,它会执行以下操作:
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
按第二个字段对它们进行排序。
我的问题是,如果我事先不知道要按哪个字段进行排序,我该如何概括这一点?就像我有时可能想按第 1 个字段和第 5 个字段排序,等等。我也希望它是线程安全的,所以我不想使用全局变量来跟踪要排序的字段因为其中多个可能同时进行。
在 C++ 中,我将只使用自定义排序类并在类中有一个实例变量来跟踪要排序的字段。我不知道如何在 C 中做这样的事情。