less对应“<”运算符,
greater对应">"运算符。
最近学习STL,发现STL默认都是使用()比较的,默认比较使用less(即'<'运算符),如sort(a,a+n),默认将数组按照递增的顺序来排序(前面的元素<后面的嘛),但是优先队列的源码比较奇特,虽然按道理使用less比较应该默认是小根堆(即堆顶元素最小),但是priority_queue
对于结构体类型,如果想自定义比较方式,可以写成以下方式,这里要注意的就是priority_queue每次都是从队尾取元素的,所以使用top()返回的是排序后的最后一个元素。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <functional>
using namespace std;
struct node
{
int a,b;
int cost;
} nod[100];
//自定义比较类
struct cmp
{
//重载()运算符
bool operator()(const node& n1, const node& n2)
{
//比较操作,按cost从小到大排序,但是这里构造出来的堆每次使用top()返回的都是cost最大的那个元素,因为堆每次都是从队尾弹出元素
return n1.cost < n2.cost;
}
};
int main()
{
priority_queue<node, vector<node>, cmp > q;
for(int i = 0; i < 5; ++i)
{
cin >> nod[i].a >> nod[i].b >> nod[i].cost;
q.push(nod[i]);
}
while(!q.empty())
{
node x = q.top();
cout << x.a << ' ' <<x.b << ' ' <<x.cost << endl;
q.pop();
}
return 0;
}
参考:https://blog.csdn.net/aamahone/article/details/82787184
原文链接: https://www.cnblogs.com/FengZeng666/p/12821842.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/196871
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!