gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:53 26 4
gpt4 key购买 nike

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

qsort 需要这样的比较函数: 不知道为什么需要三种返回值-1、0、+1。

int comp(int *x, int *y){   
return *x - *y;
}

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

bool comp(int x, int y){   
return x < y;
}

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

最佳答案

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

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

在 C++ 中,比较可以在模板实例化时内联,这样就没有了很多开销(甚至不需要函数调用)并且可以使用更简单的约定。这也意味着 std::sort可以与 operator< 一起使用默认情况下重载。

关于c++ - qsort() vs std::sort,比较函数哲学差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18002087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com