STL优先队列模板
1. 优先队列
用途:按照某一个关键字对插入元素或删除元素后的数据集进行自动排序
复杂度: logN
2. 数据声明
(1)头文件:#include<queue>
(2)声明: priority_queue <T> q; //T是一个泛型,可以是结构体
priority_queue <T,vector<T>,greater<T> > q;
greater函数也可以通过对结构体重载一个<运算符的bool函数
3. 库函数
q.size();//返回q里元素个数 q.empty();//返回q是否为空,空则返回1,否则返回0 q.push(k);//在q的末尾插入k q.pop();//删掉q的第一个元素 q.top();//返回q的第一个元素 q.back();//返回q的末尾元素
4. 实例
#include <iostream> #include <queue> using namespace std; struct Node{ int x, y; Node(int a=0, int b=0): x(a),y(b){} }; bool operator<(Node a, Node b){//返回true时,说明a的优先级低于b //x值较大的Node优先级低(x小的Node排在队前) //x相等时,y大的优先级低(y小的Node排在队前) if( a.x== b.x ) return a.y> b.y; return a.x> b.x; } int main(){ priority_queue<Node> q; for( int i= 0; i< 10; ++i ) q.push( Node( rand(), rand() ) ); while( !q.empty() ){ cout << q.top().x << ' ' << q.top().y << endl; q.pop(); } return 0; }