这是文档中的一个小错误还是我错过了一些错误

Is this a minor error in the documentation or am I missing something?

本文关键字:错误 错过了 一个 文档      更新时间:2023-10-16

我知道这是一件小事,但我想确切地了解我对std::sort()的理解。

给定功能模板

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

一个人可以在此处阅读以下内容(我的重点):

comp-比较功能对象(即满足的对象 比较要求)如果第一个参数是 比第二个

但是在下面的示例中,人们可以看到std::greater<int>()和lambda-expression [](int a, int b) { return b < a; }都不满足比较函数对象的要求。

首先阅读有些混乱,但是如果您查看a Type requirements节,则说:

比较必须满足比较的要求。

指向C 概念:比较说(强调矿山):

应用于类型对象的函数调用操作的返回值,如果上下文转换为bool,则如果呼叫的第一个参数出现在第二个严格的弱排序关系之前,则会产生true。比较类型,否则为false。

并继续建立comp(a, b)的要求,即它与以下属性建立了严格的弱排序关系:

  • 对于所有a,comp(a,a)== false
  • 如果comp(a,b)== true,则comp(b,a)== false
  • 如果comp(a,b)== true和comp(b,c)== true then comp(a,c)== true

,如果您与此一起阅读(摘自同一doc )是正确的:

上升顺序中对范围内的元素进行分类。

也就是说,要以增加顺序对范围进行排序,如果第一个参数小于秒,则必须返回 true,否则该范围将以减小的顺序排序。使用std::greater<int>和LAMBDA的示例都用于按顺序排列范围!

应该根据将对象从较小到更大的分类,即上升顺序来比较>排序比较器。

std :: sort和比较器之间的接口被定义为"比较两个对象,并告诉我一个出现在输出中的哪个对象"。就是std :: sort docs定义为"输出中的较早",不小于。

对于 greater,"比较 - 比"要较早出现在输出中,因此它告诉混乱器这些是"较少"的值,因此分类算法根据我们告诉他们的内容正确。/p>

这全都是要分开算法(根据某些顺序进行排序)和实际比较。这两个需要一个接口。

如果您用大黄馅饼(我最喜欢的"抽象"对象)思考,则可以比较它们的半径(如果pie a的半径小于pie b,则需要返回true)。我们可能还想从最美味到最健康的地方排序,因此,如果馅饼的卡路里比Pie B多。

,则恢复了真实。

少于表示以下/更早按升序排序。

(将第四个arg bool reversed to std ::排序是不必要的,因为我们可以为lambda提供反转操作员/比较。)

少于相对于您想要的东西。真正需要的是严格的订购。