C++;STL。。自定义比较器是如何工作的? 我不理解自定义比较器是如何在C++中工作的。幕后到底发生了什么

C++;STL。。自定义比较器是如何工作的? 我不理解自定义比较器是如何在C++中工作的。幕后到底发生了什么,c++,stl,comparator,C++,Stl,Comparator,假设比较器有两个参数x和ycomp(x,y) 我们使用这个比较器函数来表示向量vectorv(size),比如std::sort()或者表示优先级队列。 数组元素在运行时传递给comp()的顺序是什么。。。它像--> 对于任何类型的自定义比较,规则是什么?我听说过弱排序的概念,有人能解释清楚一点吗?来自: comp 一个二进制函数,它接受范围内的两个元素作为参数,并返回一个可转换为bool的值。返回的值指示作为第一个参数传递的元素在其定义的特定严格弱顺序中是否被视为在第二个参数之前 函数不得修改

假设比较器有两个参数
x
y
comp(x,y)
我们使用这个比较器函数来表示向量
vectorv(size)
,比如
std::sort()
或者表示
优先级队列。
数组元素在运行时传递给
comp()
的顺序是什么。。。它像-->

对于任何类型的自定义比较,规则是什么?我听说过弱排序的概念,有人能解释清楚一点吗?

来自:

comp

一个二进制函数,它接受范围内的两个元素作为参数,并返回一个可转换为bool的值。返回的值指示作为第一个参数传递的元素在其定义的特定严格弱顺序中是否被视为在第二个参数之前

函数不得修改其任何参数

这可以是函数指针或函数对象

换句话说,
comp(x,y)
应该返回true,如果结果向量中
x
应该放在
y
之前


编辑:我想我误解了你的问题。向量元素传递到比较器的顺序取决于所使用的算法,这取决于实现,因为标准没有指定精确的算法。我认为这是一种常见的算法。

无法保证如何使用比较函数,但它必须满足a,以及user9549915回答中指出的其他属性


定义严格弱排序的函数类似于通常的小于(
保存可用于对矩阵排序的标准C库qsort()。顾名思义,该函数使用快速排序算法对指定数组进行排序。以下是qsort()的示例

void qsort(void*base、size\t num、size\t size、, int(*比较器)(常数无效*,常数无效*); qsort()的要点是比较函数比较。比较函数有两个参数,并包含一个逻辑,用于确定其在已排序的输出中的相对顺序。其思想是提供灵活性,以便qsort()可以用于任何类型(包括用户定义的类型)并可用于获得任何所需的顺序(增加或减少或任何其他)。 比较函数将两个索引作为一个大小(都绑定到常量星座*),并确定返回元素的顺序(以常量和多重方式)

内部比较(常数无效*p1,常数无效*p2); 值返回意义
这有帮助吗?你是指没有两个参数可以返回
true
(例如
comp(a,a)
需要返回
false
,如果
comp(a,b)
返回
true
,那么
comp(b,a)
必须返回
false
)?@Tas抱歉,我编辑了函数用法。我指的是向量或数据结构中元素的顺序-它们如何输入比较器。感谢您解释顺序!我认为在第2点中,您指的是所有
x
y
,如果
x
为真,
y
为假。
comp(v[0],v[1]) 
comp(v[1],v[2])