繁体   English   中英

C ++ STL ..定制比较器如何工作?

[英]C++ STL .. how does custom comparator work?

我不了解自定义比较器如何在C ++中工作..幕后到底发生了什么?

假设我们的比较器comp(x,y)有两个参数xy ,我们使用此比较器函数来表示类似std::sort()的vector vector<int> v (size) std::sort()priority_queue 运行时传递给comp()的数组元素的顺序是comp()

comp(v[0],v[1]) 
comp(v[1],v[2])

对于任何类型的自定义比较,规则是什么? 我听说过弱订购概念,请问有人可以清楚地解释一下吗?

这里

comp

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

该函数不得修改其任何参数。

这可以是一个函数指针或一个函数对象。

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

编辑:我想我读错了你的问题。 矢量元素传递到比较器的顺序取决于所使用的算法,这取决于实现,因为标准没有指定确切的算法。 我相信快速排序是一种常见的算法。

无法保证如何使用比较函数,但是除了user9549915的答案中指出的其他属性外,它还必须满足严格的弱排序

定义严格弱排序的函数类似于通常的小于( < )运算符:

  1. 对于所有xx < x为假。
  2. 对于所有xy ,如果x < y为true,则y < x为false。
  3. 对于所有xyz ,如果x < yy < z都为真,则x < z必须为真。

为了便于阅读,我使用x < y代替comp(x, y)

保存可用于对矩阵进行排序的标准C库qsort()。 顾名思义,该函数使用QuickSort算法对指定的数组进行排序。 以下是qsort()的示例

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

内部比较(const void * p1,const void * p2); 返回值的含义<0由p1引用的项目位于p2引用的元素之前0 p1引用的元素等于p2引用的元素

0 p1引用的项目在p2引用的项目之后移动

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM