C++ qsort和std::sort的行为不同
我很惊讶通过C++ qsort和std::sort的行为不同,c++,sorting,qsort,C++,Sorting,Qsort,我很惊讶通过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) retu
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);
//以下比较器已在qsort中使用。
//如果lr 1
int cmpre(常数无效*l,常数无效*r){
如果((*(tpl*)l.fhf<(*(tpl*)r.fhf)
返回-1;
其他的
如果((*(tpl*)l.fhf==(*(tpl*)r.fhf){
如果((*(tpl*)l.nhf==(*(tpl*)r.nhf)
返回0;
其他的
如果((*(tpl*)l.nhf>(*(tpl*)r.nhf)
返回1;
其他的
返回-1;
}否则
返回1;
}
//排序语句如下所示:
qsort(tlst、len、sizeof(tpl)、cmpre);
完整代码链接=>
// 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);
//以下比较器用于排序
内部cmpr(施工tpl&l、施工tpl&r){
如果(l.fhfr.nhf)
返回1;
其他的
返回-1;
}否则
返回1;
}
//排序语句如下所示:
排序(tlst、tlst+len、cmpr);
在=>
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;
}
qsort
和sort
的比较函数规格不同。为什么sort和qsort的比较函数不同。谢谢你的快速回答。:-)我的意思是为什么C++希望排序函数和Q排序的比较函数具有不同的性质。设计者的想法是什么呢?@premqsort
来自C。它们是由不同的人编写的、为不同的人编写的非常不同的代码库。在C++中,<代码>排序< /COD>期望类似于<代码>的内容。
bool cmpr(const tpl &l, const tpl &r) {
return (cmpre(&l, &r) < 0);
}