特色:先進先出,模擬遞歸,運用於算法設計;算法
經常使用操做:less
Cpp: queue<int> q; //定義; q.empty(); //若是隊列爲空返回true,不然返回false q.size(); //返回隊列中元素的個數 q.pop(); //刪除隊列首元素但不返回其值 q.front(); //返回隊首元素的值,但不刪除該元素 q.push(); //在隊尾壓入新元素 q.back(); //返回隊列尾元素的值,但不刪除該元素
特色:按照鍵值的大小排隊,stl裏的用大小根堆來實現,url
/*優先隊列的基本使用 2010/7/24 dooder*/ #include<stdio.h> #include<functional> #include<queue> #include<vector> using namespace std; //定義結構,使用運算符重載,自定義優先級1 struct cmp1{ bool operator ()(int &a,int &b){ return a>b;//最小值優先 } }; struct cmp2{ bool operator ()(int &a,int &b){ return a<b;//最大值優先 } }; //定義結構,使用運算符重載,自定義優先級2 struct number1{ int x; bool operator < (const number1 &a) const { return x>a.x;//最小值優先 } }; struct number2{ int x; bool operator < (const number2 &a) const { return x<a.x;//最大值優先 } }; int a[]={14,10,56,7,83,22,36,91,3,47,72,0}; number1 num1[]={14,10,56,7,83,22,36,91,3,47,72,0}; number2 num2[]={14,10,56,7,83,22,36,91,3,47,72,0}; int main() { priority_queue<int>que;//採用默認優先級構造隊列 priority_queue<int,vector<int>,cmp1>que1;//最小值優先 priority_queue<int,vector<int>,cmp2>que2;//最大值優先 priority_queue<int,vector<int>,greater<int> >que3;//注意「>>」會被認爲錯誤, //這是右移運算符,因此這裏用空格號隔開 priority_queue<int,vector<int>,less<int> >que4;////最大值優先 priority_queue<number1>que5; priority_queue<number2>que6; int i; for(i=0;a[i];i++){ que.push(a[i]); que1.push(a[i]); que2.push(a[i]); que3.push(a[i]); que4.push(a[i]); } for(i=0;num1[i].x;i++) que5.push(num1[i]); for(i=0;num2[i].x;i++) que6.push(num2[i]); printf("採用默認優先關係:\n(priority_queue<int>que;)\n"); printf("Queue 0:\n"); while(!que.empty()){ printf("%3d",que.top()); que.pop(); } puts(""); puts(""); printf("採用結構體自定義優先級方式一:\n(priority_queue<int,vector<int>,cmp>que;)\n"); printf("Queue 1:\n"); while(!que1.empty()){ printf("%3d",que1.top()); que1.pop(); } puts(""); printf("Queue 2:\n"); while(!que2.empty()){ printf("%3d",que2.top()); que2.pop(); } puts(""); puts(""); printf("採用頭文件\"functional\"內定義優先級:\n(priority_queue<int,vector<int>,greater<int>/less<int> >que;)\n"); printf("Queue 3:\n"); while(!que3.empty()){ printf("%3d",que3.top()); que3.pop(); } puts(""); printf("Queue 4:\n"); while(!que4.empty()){ printf("%3d",que4.top()); que4.pop(); } puts(""); puts(""); printf("採用結構體自定義優先級方式二:\n(priority_queue<number>que)\n"); printf("Queue 5:\n"); while(!que5.empty()){ printf("%3d",que5.top()); que5.pop(); } puts(""); printf("Queue 6:\n"); while(!que6.empty()){ printf("%3d",que6.top()); que6.pop(); } puts(""); return 0; }
經常使用操做:spa
priority_queue<int,vector<int>,cmp1> que; //聲明,que參照上面用法; que.empty(); //判斷是否爲空 que.size(); //隊列長度; que.push(); //插入; que.pop(); //刪除; que.top(); //查詢;