我有以下结构:
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);