class priority_queue<>實作一個queue,其中的元素依優先級被讀取,它的接口和queue非常相近,push()入隊,top()/pop()通路/出隊下一個元素。
namespace std{
template <typename T,
typename Container = vector<T>,
typename Compare = less<typename Container::value_type> >
class priority_queue;
}
第一個參數:元素類型
第二個參數:帶有預設值,定義了priority_queue内部用來存放元素的容器。預設容器是vector。
第三個參數:帶有預設值,定義出“用來查找下一個最高優先級元素”的排序準則。預設以operator<作為比較标準。
核心接口
push():将一個元素放入priority_queue中;
top():傳回priority_queue内的“下一個元素”;
pop():從priority_queue内移除一個元素。
和其他container adapter一樣,pop()會移除下一進制素,但不會傳回它。top()傳回下一個元素,但不移除它。
如果priority_queue内沒有元素,執行top()和pop()會導緻不确定的行為。可以先調用成員函數size()和empty()檢驗容器是否為空。
優先級
預設是less,也可以修改成greater
priority_queue<int, vector<int>, greater<int> > q;
自定義優先級
struct cmp
{
bool operator() (int x, int y) const{
return x < y;
}
};
priority_queue<int, vector<int>, cmp > q;