[英]How does the comparator function work in Priority Queue C++ STL?
[英]C++ STL .. how does custom comparator work?
我不了解自定义比较器如何在C ++中工作..幕后到底发生了什么?
假设我们的比较器comp(x,y)
有两个参数x
和y
,我们使用此比较器函数来表示类似std::sort()
的vector vector<int> v (size)
std::sort()
或priority_queue
。 运行时传递给comp()
的数组元素的顺序是comp()
comp(v[0],v[1])
comp(v[1],v[2])
对于任何类型的自定义比较,规则是什么? 我听说过弱订购概念,请问有人可以清楚地解释一下吗?
无法保证如何使用比较函数,但是除了user9549915的答案中指出的其他属性外,它还必须满足严格的弱排序 。
定义严格弱排序的函数类似于通常的小于( <
)运算符:
x
, x < x
为假。 x
和y
,如果x < y
为true,则y < x
为false。 x
, y
和z
,如果x < y
和y < 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.