我正在尝试重构一个当前是独立的C程序的实用工具,以便我可以制作可重用的库。它包括对数组进行排序的步骤,根据全局数组中相应的值。
// Global lookup table
double *rating;
// Comparator using lookup
int comp_by_rating(const void *a, const void *b) {
int * x = (int *) a;
int * y = (int *) b;
if (rating[*x] > rating[*y])
return 1;
else if (rating[*x] < rating[*y])
return -1;
else
return 0;
}
int main() {
int* myarray;
// ...
// initialize values of local myarray and global rating
// ...
qsort(myarray, length_myarray, sizeof(int), comp_by_rating);
// ...
return 0;
}
有没有办法避免使用全局的rating
查找表?我通常使用C++,所以我的第一个想法是使用函数对象,但我必须保持在C中,所以我猜我没有函数对象可用。我也不能用一个包含每个项目评分的结构体数组替换int *myarray
,因为其他代码需要当前形式的数组。我还有其他选择吗?
void *user_data
参数并将其传递给比较函数的qsort
变体有多难? - n. m.