QSORT和STD ::排序的行为不同
qsort and std::sort behaving differently
我非常惊讶地,通过qsort
和std::sort
进行排序可以产生不同的结果。我需要帮助解释以下片段的行为:
-
使用
qsort
:// the following comparator has been used in qsort. // if l<r : -1, l==r : 0 , l>r 1 int cmpre(const void *l, const void *r) { if ((*(tpl *)l).fhf < (*(tpl *)r).fhf) return -1; else if ((*(tpl *)l).fhf == (*(tpl *)r).fhf) { if ((*(tpl *)l).nhf == (*(tpl *)r).nhf) return 0; else if ((*(tpl *)l).nhf > (*(tpl *)r).nhf) return 1; else return -1; } else return 1; } // and sort statement looks like : qsort(tlst, len, sizeof(tpl), cmpre);
完成代码链接=>http://ideone.com/zn87tx
-
使用排序:
// the following comparator was used for sort int cmpr(const tpl &l, const tpl &r) { if (l.fhf < r.fhf) return -1; else if (l.fhf == r.fhf) { if (l.nhf == r.nhf) return 0; else if (l.nhf > r.nhf) return 1; else return -1; } else return 1; } // and sort statement looks like : sort(tlst, tlst + len, cmpr);
完成代码链接=>http://ideone.com/37dc2s
您可以在分类操作后和之前看到链接上的输出,并且可能希望查看用于比较两个元组的compr
和compre
方法。我不明白为什么sort
无法对数组进行排序,而qsort
可以这样做。
重写cmpr()
为
bool cmpr(const tpl &l, const tpl &r){
if(l.fhf != r.fhf) return l.fhf < r.fhf;
return l.nhf < r.nhf;
}
或,您也可以重用cmpre()
实现cmpr()
。
bool cmpr(const tpl &l, const tpl &r) {
return (cmpre(&l, &r) < 0);
}
相关文章:
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- std::sort()函数无法对向量的一部分进行排序
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 使用 std::sort 对向量进行稳定排序
- std::排序在共享指针的向量上
- 如何根据排序索引的向量对 std::index 集进行排序?
- 如何按键对 std::对列表进行排序?
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 为什么我的函数接受"std::string"进行排序不会改变它?
- 如何在 c++11 中静态断言 std::array 类成员进行排序?
- 使用 std::sort 对二维 c 数组进行排序
- std::tuple 可以根据其值在编译时/运行时排序吗?
- 如何排序 std::p空气优先
- 仅当条件适用时才排序 - std::sort
- 排序 std::set 使用 operator() 对插入进行排序
- C++ - 排序 std::vector 中元素的索引
- 合并排序 std:string 中的字符
- 部分排序 std::list