我很驚訝,通過qsort
和std::sort
排序可以產生不同的結果。我需要幫助解釋下面的代碼片段的行爲:使用qsort
qsort和std :: sort的行爲有所不同
:
// 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
能夠這樣做。
'qsort'和'sort'的比較函數的spec是_different_。 – timrau