将比较函数写入 qsort 以按指定字段对结构数组进行排序?
Write compare function to qsort to order array of structs by specified field?
我有以下结构:
struct Variant{
char name[50];
int age;
long long int temporal_aura;
char timeline[50];
char status;
};
我将有一个结构数组,我想按上面的任何字段(姓名、年龄、temporal_aura、时间线、状态)对其进行排序。用于对数组进行排序的字段将由用户提供。例如:
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);
}
我的问题是:我是否必须为结构的每个成员编写一个比较函数?有什么方法可以优化此代码的比较功能吗?
will I have to write a compare function to each member of the struct?
是的。
(除非你想要一个肮脏的“在全局变量中传递信息”解决方案)。
研究 qsort_r()
寻找 qsort()
替代方案。
顺便说一句,我希望 qsort(variants, n, sizeof(Variant*), compare);
(注意:*
)或更好的 qsort(variants, n, sizeof *variants, compare);
我有以下结构:
struct Variant{
char name[50];
int age;
long long int temporal_aura;
char timeline[50];
char status;
};
我将有一个结构数组,我想按上面的任何字段(姓名、年龄、temporal_aura、时间线、状态)对其进行排序。用于对数组进行排序的字段将由用户提供。例如:
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);
}
我的问题是:我是否必须为结构的每个成员编写一个比较函数?有什么方法可以优化此代码的比较功能吗?
will I have to write a compare function to each member of the struct?
是的。
(除非你想要一个肮脏的“在全局变量中传递信息”解决方案)。
研究 qsort_r()
寻找 qsort()
替代方案。
顺便说一句,我希望 qsort(variants, n, sizeof(Variant*), compare);
(注意:*
)或更好的 qsort(variants, n, sizeof *variants, compare);