本文介绍: 在C++中,的默认行为是生成大根堆。如果想要生成小根堆,可以使用构造函数的第三个参数,传入一个自定义的比较函数。对于类型为然后在定义//我们定义了一个小根堆,堆的元素是pair类型的,使用自定义的比较函数cmp对元素进行排序。// 当然也可以使用lambda。
priority_queue比较规则
std::priority_queue
实际上就是一个堆,可用于堆排序。
std::priority_queue
是C++ STL中的一个容器适配器,它提供常数时间查找最大元素的功能。默认情况下,它使用元素的<
运算符进行排序(升序),所以最大的元素总是位于队列的顶部。然后,如果你想自定义排序规则,你需要提供自己的比较函数,可以通过在定义std::priority_queue
时传入一个比较函数对象来实现。
默认情况下,标准库在元素类型上使用<运算符来确定相对优先级,priority_queue中,默认less<>建大根堆,在自定义类型时,会调用operator<,若返回true,说明此此元素的父节点小于此节点,需要向上调整。所以priority_queue默认使用时,而又想建小堆,要重载operator<,需要return a.x>b.x,方可。
比较函数对象
让priority_queue
按照元素的相反顺序排序,我们传递了std::greater<int>
作为比较函数对象给std::priority_queue
,这使得队列以相反的顺序排序,即最小的元素总是在队列的顶部。
自定义函数比较对象
在C++中,priority_queue
的默认行为是生成大根堆。如果想要生成小根堆,可以使用构造函数的第三个参数,传入一个自定义的比较函数。对于类型为pair<int, pair<int,int>>
的小根堆,可以定义一个比较函数如下:
然后在定义priority_queue
的时候使用这个比较函数:
重载运算符
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。