普通佇列是先進先出的資料結構,元素在佇列尾新增,在佇列頭刪除
優先佇列,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除,最先出的特徵(first in,largest out)
包含標頭檔案#include
,和queue
不同的就在於我們可以自定義其中資料的優先順序,讓優先順序高的排在佇列前面,優先出隊
優先佇列具有佇列的所有特性和基本操作,只是在這基礎上新增了乙個內部排序,本質是乙個堆實現的
和佇列基本操作相同:
定義:priority_queue當需要用自定義的資料型別時才需要傳入這三個引數,使用基本資料型別時,只需要傳入資料型別,預設是小於比較器type 就是資料型別
container 就是容器型別(container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list;stl裡面預設用的是vector)
functional 就是比較的方式
一般是:
//公升序佇列,隊頭值最小
priority_queue ,greater> q;
//降序佇列
priority_queue ,less> q; /*
greater和less是std實現的兩個仿函式
(就是使乙個類的使用看上去像乙個函式。其實現就是類中實現乙個operator(),這個類就有了類似函式的行為,就是乙個仿函式類了)
*/
#include #include using namespace std;
int main()
while (!a.empty())
while(!c.empty())
//字串
b.push("abc");
b.push("abcd");
b.push("cbd"); //cbd優先順序最高
while(!b.empty())
cout << endl;
return 0;
}
執行結果:
規則:pair的比較,先比較第乙個元素,第乙個相等比較第二個4 3 2 1 0
0 1 2 3 4
cbd abcd abc
#include #include #include using namespace std;
int main()
}
執行結果:
2 5
1 3
1 2
#include #include using namespace std;
//方法1
struct tmp1
bool operator<(const tmp1& a)
};//方法2
struct tmp2 // 重寫仿函式
};int main()
cout << endl;
priority_queue, tmp2> f;
f.push(b);
f.push(c);
f.push(a);
while(!f.empty())
}
執行結果:
3 2 1
3 2 1
STL容器 優先佇列priority queue
priority queue顧名思義,是乙個具有權值概念的queue,它和queue一樣允許加入新元素 移除舊元素等功能。由於這是乙個queue,所以只允許在底部加入元素,從頂部取出元素。但優先佇列帶有權值概念,其內的元素自動按照元素的權值排序。權值最高者排在最前面。stl的priority que...
STL初步 優先佇列Priority queue
這個優先到底是如何優先?和普通佇列區別在哪?priority queue type,container,functional priority queue,less q priority queue,less a q priority queue,less b 優先佇列中沒有迭代器 也沒有clear...
優先順序佇列用法詳解(priority queue)
由於優先順序佇列的內部資料結構為堆,所以這裡先介紹堆的一些操作。堆的一些函式操作在algorithm標頭檔案中 在 first,last 範圍內 構造最大堆,first,last 可以是vector指標也可以是陣列指標 make heap first last make heap first las...