5.1 priority_queue使用

1:基本类型,priority_queue定义时只指定第一个参数,默认是小顶堆;指定第三个参数为less<>就是大顶堆了

2:自定义类型,priority_queue必须指定全部三个参数,比较函数也要定义成个结构体struct cmp,里面定义一个

bool operator( )( arg1, arg2){ ....};

#include <stdio.h>
#include <queue>
using namespace std;

int n;


//1: 基本类型
//priority_queue<int> q;//仅有第一个参数,缺省后两个,默认是大顶堆

//priority_queue<int, vector<int>, less<int>> q;//使用less<>, 大顶堆, 

priority_queue<int, vector<int>, greater<int>> q;//使用greater<>, 小顶堆

//2: 自定义类型
typedef struct node{
	int data;
};

typedef struct cmp{
	bool operator()(node a, node b){//注意operator后面跟着()
		return a.data > b.data;	
	}
};
//priority_queue<node> qn1;//不支持! 
//priority_queue<node, vector<node>, cmp> qn;//cmp里使用<比较, 大顶堆
priority_queue<node, vector<node>, cmp> qn;//cmp用>, 小顶堆


int main(){
	//1: 基本类型
	/*q.push(5);
	q.push(13);
	q.push(6);

	while(!q.empty()){
		printf("%d\n",q.top());
		q.pop();
	}*/

	//2: 自定义类型
	 
	node n1;
	n1.data = 17;
	qn.push(n1);
	node n2;
	n2.data = 4;
	qn.push(n2);
	node n3;
	n3.data = 9;
	qn.push(n3);

	while(!qn.empty()){
		printf("%d\n",qn.top());
		qn.pop();
	}
	

	return 0;
}


ref:

http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022219.html


你可能感兴趣的:(5.1 priority_queue使用)