gpt4 book ai didi

c - 将额外参数传递给 qsort 的比较器

转载 作者:太空狗 更新时间:2023-10-29 16:35:34 24 4
gpt4 key购买 nike

我只是想知道是否有办法将一个额外的参数传递给我的比较器,然后在我的 qsort 函数中使用它?

例如我有这 2 个比较器(一个按升序排列,一个按降序排列)

qsort(entries, 3, sizeof(struct entry), compare_desc);

int compare_asc(const void *elem1, const void *elem2)
{
return strcmp(elem1.name.last, elem2.name.last);
}


int compare_desc(const void *elem1, const void *elem2)
{
return strcmp(elem2.name.last, elem1.name.last);
}

有没有办法让我可以做这样的事情:

int compare(const void *elem1, const void *elem2, const char *order)
{
if (strcmp(order, "asc") == 0)
return strcmp(elem1.name.last, elem2.name.last);
else if (strcmp(order, "desc") == 0)
return strcmp(elem2.name.last, elem1.name.last);
}

我问的原因是我的排序程序必须使用开关,如果我有 2 个不同的开关 (+a, -a) 分别用于升序和降序,那么我必须制作 2 个不同的比较器函数。如果我添加更多,它会变得更复杂。有没有办法改进这个程序的设计?

编辑:不允许全局和外部变量。

最佳答案

老问题,但万一有人无意中发现它...

有非标准版本的 qsort() 可让您将额外参数传递给回调函数。 glib 提供 qsort_r() 而 VC 为您提供 qsort_s()。

关于c - 将额外参数传递给 qsort 的比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4210689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com