5 ms·
The C greater function is unnecessarily long int greater(const void* p, const void* q) { return *(double *)p - *(double *)q; } would work just as w
by pavanky 12y ago
The C greater function is unnecessarily long
int greater(const void* p, const void* q)
{
return *(double *)p - *(double *)q;
}
would work just as well.
EDIT: DON'T USE THIS, WONT ALWAYS WORK
- kbwt 12y agoThat is technically undefined behavior, because the result of the double subtraction could very well be a number that is not representable within the range of a signed int.
- alayne 12y agoDon't do this. It has overflow issues.
- pavanky 12y agoYou are right. He was really careful in picking double instead of int for this example.
- ridiculous_fish 12y agoActually I would say it was rather careless, because it mishandles NaNs: vector<double> v = {0, nan(""), 1}; sort(v.begin(), v.end(), [](double x, double y) { return x>y; }); In my test this leaves the vector unchanged, which is definitely not in decreasing order.
- lomnakkus 12y ago">" does not form a total order on doubles if you include NaN, so that's not really suprising. That is, you're providing a comparison function which is invalid, you should (at best) expect invalid results.
- _RPM 12y agoWhat is the point of defining the function with two void* arguments if the cast will just take place anyway?
- huu 12y agoThe signature of greater is relevant because it has to conform to the interface for qsort. See the final argument of the interface here: http://www.cplusplus.com/reference/cstdlib/qsort/ http://www.cplusplus.com/reference/cstdlib/qsort/