qsort()vs std :: sort,比较函数的哲学差异

Dav*_*vid 5 c c++ std

我想知道为什么有两种完全不同的方法来指定qsort(){C version}中的比较函数std::sort().

qsort 需要比较函数如下:我不知道为什么它需要三种返回值-1,0,+ 1.

int comp(int *x, int *y){   
   return *x - *y; 
}
Run Code Online (Sandbox Code Playgroud)

而比较函数for std::sort(),看起来更加一致,因为它是根据函数来编写的,以遵循不变量.即如果x小于y函数返回true,则x相对于y处于正确位置

bool comp(int x, int y){   
       return x < y; 
}
Run Code Online (Sandbox Code Playgroud)

为什么我们在返回bool时需要三个值-1,0,+ 1(或两个值为0的int)更简单干净?

Fre*_*Foo 6

其他人指出了两种比较方式的等价性; 这就是为什么遵循这两种方法的原因.

在C中,比较需要是函数指针.这意味着你总是得到函数调用和指针间接开销.当qsort在20世纪70年代在PDP-11计算机上设计时,必须减少开销量,以便比较功能,例如strcmp在单个函数调用中进行三向比较.(注意,这qsort通常是一种不稳定的排序,因此相等的情况可能看起来没用,但可以通过适当的指针比较使其稳定.)

在C++中,比较可以在模板实例化时间内联,因此大部分开销都消失了(甚至不需要函数调用),并且可以使用更简单的约定.这也意味着默认情况下std::sort可以使用operator<重载.