![]() |
1
11
从某种意义上说,另外两个是隐含的,但更准确的说法是,比较排序实际上并不存在 一个三值比较器和C++的排序是以一种不使用三值比较器的方式实现的,以最小化比较器所需的行为。 std::sort定义并专门使用这样的内容是错误的:
C++是指“严格弱序”。如果
唯一不同的是你什么时候说什么
C++在API中采用了相当纯的数学方法,所以所有的事物都是以单一的二元关系定义的。Java在某些方面更友好,并且更喜欢三方比较,其中基本单元(比较)的定义稍微复杂一点,但是从中引出的逻辑更简单。这也意味着排序算法在每次比较中获得更多的信息,这有时是有用的。例如,请参阅“荷兰国旗”快速排序优化,当数据中存在大量“在同一位置”重复项时,这是一个好处。
|
![]() |
2
1
我在C++中的猜测是为了减少代码复制:一旦定义了类/类型上的比较OP,就可以通过简单地编写一个LT来比较这些对象。b、 同时也获得了对这类对象进行排序的能力。 至于排序,我们只需要少于运算符,为什么要引入额外的东西?:) |
![]() |
3
0
|
![]() |
Noah Wilder · Swift中元组的操作符重载 7 年前 |
![]() |
Salman · 指向具有数组索引运算符重载的类的指针 7 年前 |
![]() |
Nom OnTheCookie · 使用向量重载C++输出 7 年前 |
![]() |
J. Doe · C++重载:从友元函数切换到成员函数 7 年前 |
![]() |
Ana · 使用操作符重载添加存储在vector中的类对象 7 年前 |
![]() |
Matthew · 重载运算符|用于固定大小的阵列? 7 年前 |
![]() |
Martin Žid · 重载运算符+=具有两个类 7 年前 |