天天看點

Priority Queue——優先級隊列

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;