STL十大容器 之 优先队列 priority_queue

头文件:

    #include <queue>

可调用函数:

	empty() 如果优先队列为空,则返回真 
	pop() 删除第一个元素 
	push() 加入一个元素 
	size() 返回优先队列中拥有的元素的个数 
	top() 返回优先队列中有最高优先级的元素 

泛型的实现:

		tmplate<class T,class C,class COM>
		//T代表容器存储的类型   C代表底层实现的容器     COM表示优先级规则
		class priority_queue{
		
		};//默认是根据自定义类型的 < 比较来确定优先级

应用:

要求:
1、存储学生类型;
2、成绩最高的先出列 成绩一样则按学号出列;

程序示例:

#include <queue>
#include <vector>
#include <list>
#include <deque>
#include <iostream>
using namespace std;
class Com{
public:
	int operator()(const int& a,const int& b){
		return a>b;	
	}
	
};

class Stu{
public:
	int no;
	string name;
	int score;
	Stu(int no=0,string name="",int score=0):no(no),name(name),score(score){}
	int operator<(const Stu& s)const{
		return score < s.score;
	}
};
int main(){
	priority_queue<Stu> que;
	que.push(Stu(110,"马云",90));
	que.push(Stu(120,"马化腾",89));
	que.push(Stu(130,"马超",98));
	que.push(Stu(140,"马哥",70));
	while(!que.empty()){
		cout << que.top().score << endl;
		que.pop();
	}
	//priority_queue<int> pq;
	//priority_queue<int,vector<int> > pq;
	//priority_queue<int,list<int> > pq;
	priority_queue<int,deque<int>,Com> pq;
	
	pq.push(5);
	pq.push(2);
	pq.push(7);
	pq.push(3);
	pq.push(9);
	pq.push(8);

	cout << pq.size() << endl;
	cout << pq.top() << endl;
	
	while(!pq.empty()){
		cout << pq.top() << " ";
		pq.pop();
	}
	cout << endl;

	return 0;	
}
上一篇:合并果子(STL优先队列)


下一篇:Matrix [STL]Priority Queue (eden) POJ 3125