acm第一次STL(講述隊列與優先隊列)

一、隊列(queue)
1.含義:是一種從頂端取出元素,從尾端加入元素的一種新的數據結構
2.
頭文件: #include
定義:queue <數據類型> 變量名;
如:queue q;
操作:
empty() – 返回bool型,表示queue爲空 (q.empty() )
size() – 返回queue內元素個數 (q.size() )
front() – 返回queue內的第一個元素 (q.front() )
back() – 返回queue內的最後一個元素(q.back() )
pop() – 移除queue中的第一個元素(q.pop(); )
push(data_type a) – 將一個元素a置入queue中(q.push(a); )
3.舉例:
#include
#include
#include
using namespace std;
int main(){
queues;
s.push(1);
s.push(2);
s.push(3);
cout << "Front: " << s.front() << endl;
cout << "Back: " << s.back() << endl;
s.pop();
cout << "Size: " << s.size() << endl;
cout << "Front: " << s.front() << endl;
cout << "Back: " << s.back() << endl;
return 0;
}
運行結果:
Front:1
Back:3
Size:2
Front:2
Back:3
二、優先隊列(priority_queue)
1.含義:自動按照元素的權值排序,權值最高的在第一個。(默認從大到小排,但是它不是遞減的數列,只是把最大的數始終放在第一個,其他的數不一定按照從大到小排,即最後一個數不一定是最小的數)
2.排列規則:優先隊列的排列規則與我們規定的排列規則(如struck和greater< >)始終相反。(我們規定從大到小排,則優先隊列爲小頂堆;我們規定從小到大排,則優先隊列爲大頂堆)
3.
頭文件: #include
定義1:priority_queue <數據類型> 變量名;
{或者是定義2:priority_queue<Type, Container, Functional>
Type 就是數據類型,Container 就是容器類型(Container必須是用數組實現的容器,比如vector,deque等等,但不能用 list。STL裏面默認用的是vector),Functional 就是比較的方式,當需要自己設定優先隊列的排列方式時才需要傳入這三個參數,而其他時候只需要傳入數據類型,如定義1}
如:priority_queue q;//默認爲大頂堆

priority_queue <int,vector<int>,greater<int> > q;

//小頂堆
priority_queue <int,vector,less >q;
//大頂堆
操作:
q.push(a) 將元素a置入優先隊列
q.top() 返回優先隊列的第一個元素
q.pop() 移除第一個元素
q.size() 返回隊列中元素的個數
q.empty() 返回優先隊列爲空
4.例子:
#include
#include
#include
using namespace std;
#define pow2(a) ((a)*(a))
#define dist2(x, y) (pow2(x) + pow2(y))
struct coord{
int x, y;
const bool operator<(const coord &b)const{
return (dist2(x, y) < dist2(b.x, b.y));
}
};
int main(){
priority_queue s;
coord a;
a.x = 3, a.y = 2;
s.push(a);
a.x = 1, a.y = 2;
s.push(a);
a.x = 2, a.y = 2;
s.push(a);
cout << "Size: " << s.size() << endl;
cout << "Top: " << s.top().x << ", " << s.top().y << endl;
s.pop();
cout << "Top: " << s.top().x << ", " << s.top().y << endl;
return 0;
}
運行結果:
Size:3
Top:3,2
Top:2,2

5.如何生成一個小頂堆的優先隊列?
priority_queue<數據類型,vector<數據類型>,greater<數據類型>>變量名;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章