c-将比较函数写入qsort,以便按指定字段对结构数组进行排序



我有以下结构:

struct Variant{
char name[50];
int age;
long long int temporal_aura;
char timeline[50];
char status;
};

我会有一个structs数组,我想按照上面的任何字段(name、age、temporal_aura、timeline、status(对它进行排序。用于对数组进行排序的字段将由用户给定。例如:

void sort_struct(Variant **variants, int n, char *field){
if(!strcmp(field,"name"))
qsort(variants, n, sizeof(Variant), compare);
if(!strcmp(field,"age"))
qsort(variants, n, sizeof(Variant), compare);
if(!strcmp(field,"temporal_aura"))
qsort(variants, n, sizeof(Variant), compare);
if(!strcmp(field,"timeline"))
qsort(variants, n, sizeof(Variant), compare);
if(!strcmp(field,"status"))
qsort(variants, n, sizeof(Variant), compare);
}

我的问题是:我是否必须为结构的每个成员编写一个比较函数?有什么方法可以优化这个代码的比较函数吗?

是否必须为结构的每个成员编写一个比较函数?


(除非您想要一个脏的"全局变量中的传递信息"解决方案(。

研究qsort_r()以获得qsort()替代方案。


BTW,我本以为qsort(variants, n, sizeof(Variant*), compare);(注:*(或更好的qsort(variants, n, sizeof *variants, compare);

最新更新