不出所料,priority_queue 容器介面卡定義了一個元素有序排列的佇列。預設佇列頭部的元素優先順序最高。因為它是一個佇列,所以只能存取第一個元素,這也意味著優先順序最高的元素總是第一個被處理。但是如何定義“優先順序”完全取決於我們自己。如果一個優先順序佇列記錄的是醫院裡等待接受急救的病人,那麼病人病情的嚴重性就是優先順序。如果佇列元素是銀行的借貸業務,那麼借記可能會優先於信貸。
priority_queue 模板有 3 個引數,其中兩個有預設的引數;第一個引數是儲存物件的型別,第二個引數是儲存元素的底層容器,第三個引數是函數物件,它定義了一個用來決定元素順序的斷言。因此模板型別是:
template <typename T, typename Container=std::vector<T>, typename Compare=std::less<T>> class priority_queue
如你所見,priority_queue 範例預設有一個 vector 容器。函數物件型別 less<T> 是一個預設的排序斷言,定義在標頭檔案 function 中,決定了容器中最大的元素會排在佇列前面。fonction 中定義了 greater<T>,用來作為模板的最後一個引數對元素排序,最小元素會排在佇列前面。當然,如果指定模板的最巵一個引數,就必須提供另外的兩個模板型別引數。
圖 1