微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将比较函数写入 qsort 以按指定字段对结构数组进行排序?

我有以下结构:

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,"temporal_aura"))
        qsort(variants,"timeline"))
        qsort(variants,"status"))
        qsort(variants,compare);
}

我的问题是:我是否必须为结构的每个成员编写一个比较函数?有没有办法优化这个代码比较函数

解决方法

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

是的。
(除非您想要一个肮脏的“在全局变量中传递信息”解决方案)。

研究 qsort_r() 以寻找 qsort() 替代方案。


顺便说一句,我本来希望 qsort(variants,n,sizeof(Variant*),compare);(注意:*)或更好的 qsort(variants,sizeof *variants,compare);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。