【发布时间】:2020-05-17 21:02:56
【问题描述】:
根据文档,qsort 应该像这样使用:
std::qsort(a, size, sizeof *a, [](const void* a, const void* b)
{
if(*a < *b) return -1;
if(*a> *a) return 1;
return 0;
});
如果值相同并且我不介意哪个先出现,或者我更喜欢一个基于其他变量的值在另一个之前出现,我可以这样做吗?
if(*a < *b) return -1;
else return 1;
【问题讨论】:
-
不,您不能这样做,因为 qsort 将无法决定两个相等元素中的哪一个应该先行。您的情况是 cmp(a,b) 和 cmp(b,a) 都返回 1(对于相等的元素 a 和 b)这可能会与 qsort 算法混淆。
-
考虑使用
std::sort而不是qsort