C++ 这是文档中的一个小错误还是我遗漏了什么?

C++ 这是文档中的一个小错误还是我遗漏了什么?,c++,c++11,std,functor,C++,C++11,Std,Functor,我知道这是一件小事,但我想准确地理解std::sort() 给定函数模板 template< class RandomIt, class Compare > void sort( RandomIt first, RandomIt last, Compare comp ); template 无效排序(RandomIt first,RandomIt last,comp比较); 可以阅读以下内容(我的重点): comp-比较函数对象(即满足 要求(比较)返回哪个​如果第一个参数为 小

我知道这是一件小事,但我想准确地理解
std::sort()

给定函数模板

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
template
无效排序(RandomIt first,RandomIt last,comp比较);
可以阅读以下内容(我的重点):

comp-比较函数对象(即满足 要求(比较)返回哪个​如果第一个参数为 小于第二个


但是在下面的例子中,我们可以看到无论是
std::greater()
还是lambda表达式
[](int a,int b){return b
都不能满足比较函数对象的这一要求。

如果您将其与此一起阅读(取自):

按升序对[first,last]范围内的元素进行排序


也就是说,要按递增顺序对范围进行排序,如果第一个参数小于第二个参数,则cmp必须返回
true
,否则范围将按递减顺序进行排序。使用
std::greater
和lambda的示例都用于按递减顺序对范围进行排序!

如果您将其与此一起阅读,则这是正确的(摘自:

按升序对[first,last]范围内的元素进行排序


也就是说,要按递增顺序对范围进行排序,如果第一个参数小于第二个参数,cmp必须返回
true
,否则范围将按递减顺序进行排序。使用
std::greater
和lambda的示例都用于按递减顺序对范围进行排序!

应该在t中比较less根据排序比较器的定义,从小到大排序对象的ERM,即升序

std::sort和比较器之间的接口定义为“比较两个对象并告诉我哪一个在输出中出现得更早”。Less正是std::sort文档定义为“在输出中出现得更早”的,而不是小于

对于<代码>大于<代码>,“比较大于”将出现在输出的前面,因此它会告诉分拣机这些是“较小”值,这样分拣算法就可以根据我们告诉他们的信息进行正确排序

这一切都是关于分离算法(按照某种顺序排序)和实际比较。这两者需要一个接口

如果你从大黄派(我最喜欢的“抽象”对象)的角度考虑,可以将它们与半径进行比较(如果A的半径小于B,那么我们需要返回true)。我们可能还想从最美味到最健康进行排序,因此如果A的卡路里含量高于B,则返回true

Less表示按升序排列在下面/前面


(将第四个arg
bool反转为std::sort是不必要的,因为我们可以为lambda提供反转运算符/比较。)

根据排序比较器的定义,它应该根据从小到大的排序对象来比较less,即升序

std::sort和比较器之间的接口定义为“比较两个对象并告诉我哪一个在输出中出现得更早”。Less正是std::sort文档定义为“在输出中出现得更早”的,而不是小于

对于<代码>大于<代码>,“比较大于”将出现在输出的前面,因此它会告诉分拣机这些是“较小”值,这样分拣算法就可以根据我们告诉他们的信息进行正确排序

这一切都是关于分离算法(按照某种顺序排序)和实际比较。这两者需要一个接口

如果你从大黄派(我最喜欢的“抽象”对象)的角度考虑,可以将它们与半径进行比较(如果A的半径小于B,那么我们需要返回true)。我们可能还想从最美味到最健康进行排序,因此如果A的卡路里含量高于B,则返回true

Less表示按升序排列在下面/前面


(将第四个arg
bool反转为std::sort是不必要的,因为我们可以为lambda提供反转运算符/比较。)小于某物是相对于你想要的。真正需要的,实际上是一个严格的顺序。小于某物是相对于你想要的。真正需要的,实际上是一个严格的顺序。

一开始读起来有点混乱,但如果你看一看
类型要求
部分,它会说:

比较必须符合比较的要求

哪一个指向哪一个(强调我的):

应用于Compare类型对象的函数调用操作的返回值,当上下文转换为bool时,如果调用的第一个参数出现在由该比较类型导出的严格弱排序关系中的第二个参数之前,则返回true,否则返回false

并进一步建立了comp(a,b)
的要求,即它建立了严格的弱序关系,具有以下属性:

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

一开始读起来有些混乱,但如果你看一看
类型要求部分,它会说:

比较必须符合比较的要求

哪一个指向哪一个(强调我的):

应用于Compare类型对象的函数调用操作的返回值,当上下文转换为bool时,如果调用的第一个参数出现在严格弱排序关系中的第二个参数之前,则返回true