堆STL和重载运算符

https://www.cnblogs.com/kylara/p/9804251.html

大根堆:
    1.priority_queue<int> q;【默认

    2. priority_queue< node,vector<node>,less<node> > q;【自带比较函数

小根堆:
    priority_queue< node,vector<node>,greater<node> > q;【自带比较函数

重载运算符:

1.定义struct node 之后重载
这是小根堆

priority_queue<node>q;//或 priority_queue< node,vector<node>,less<node> >q;
bool operator<(node a,node b)//或写做(const node &a,const, node &b) 更快
{
return a.y>b.y;//以y从小到大排序
}

2.在定义struct node时重载
struct node
{
int id,v;
bool operator<(const node &a) const{
return v<a.v;//以v从大到小排序
}
};
priority_queue<node>q;

3.定义友元操作类重载函数
struct node
{
int v;
friend bool operator<(const node &a,const node &b){
return a.v<b.v; //按v从大到小排列
}
};
priority_queue<node>q;

自定义比较函数模板结构
struct cmp
{
bool operator ()(const node &a, const node &b)
{
return a.v>b.v;// 按照v从小到大排列
}
};
priority_queue<node,vector<node>,cmp> q;

 

#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
struct node
{
int id,v;
//id为位置,v为权值 
bool operator<(const node &a) const
{
    return v<a.v;//以v从大到小排序
}
};
priority_queue<node> q;
int main()
{
	for (int i=1;i<=5;i++)
	{
		int a,b;
		cin>>a>>b;
		node temp;
		temp.id=a;
		temp.v=b;
		q.push(temp);
	}
	cout<<"the result is "<<endl;
	while (q.size()>0)
	{
		node aa;
		aa=q.top();
		q.pop();
		cout<<aa.id<<"   "<<aa.v<<endl;
	}
}
/*
1 7
9 5
3 8
4 6
6 4
the result is
3   8
1   7
4   6
9   5
6   4

*/ 

  

#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
struct node
{
int id,v;
//id为位置,v为权值 
bool operator<(const node &a) const
{
//保证位置编号从小到大,位置编号一样则权值从小到大 
//有双关键字时一定要看下第一个关键是否相等 if (id==a.id) return v>a.v; else return id>a.id; //return v<a.v;//以v从大到小排序 } }; priority_queue<node> q; int main() { for (int i=1;i<=5;i++) { int a,b; cin>>a>>b; node temp; temp.id=a; temp.v=b; q.push(temp); } cout<<"the result is "<<endl; while (q.size()>0) { node aa; aa=q.top(); q.pop(); cout<<aa.id<<" "<<aa.v<<endl; } } /* 1 3 1 9 1 2 9 8 7 6 the result is 1 2 1 3 1 9 7 6 9 8 */

  

posted @ 2020-10-08 16:18  我微笑不代表我快乐  阅读(232)  评论(0编辑  收藏  举报