當需要獲取到最大最小元素值,而又不想用最大最小堆的原生實現,stl提供了更簡單的庫,就是priority_queue,其時間複雜度也只有o(n
logn
)o(nlogn)
o(nlog
n)priority_queue的本質是乙個堆,其相對於queue的不同之處在於:優先佇列實現了內部自動排序,可根據自己的需要自定義排序規則,可以自己編寫函式或者仿函式用於內部優先順序的確定。
標頭檔案為#include
priority_queue
namespace std
type:資料型別
container:儲存資料的容器(必須是陣列實現的容器,比如vector,deque等,不能使用list,預設為vector。)
functional: 元素的比較方式。
元素的優先順序取決於設定的排序函式。如果沒有設定,預設的排序法是利用operator< 形成降序排列,也就是從大到小排列的大頂堆,堆首元素為最大的元素。
1.1 基本函式
top()
push()
pop()
2.1. 降序排列
#include #include using namespace std;
int main()
return 0;
}
2.4 以下代**返回pair的比較結果,先按照pair的first元素公升序,first元素相等時,再按照second元素公升序
#include#include#includeusing namespace std;
int main()
};bool operator<(node a, node b)
int main()
return 0;
}
2.6. 小頂堆:此時不能像基本型別這樣宣告priority_queue,原因是greater沒有定義,如果想用這種方法定義則可以過載operator >。
#include #include using namespace std;
struct node
};bool operator>( node a, node b )
int main()
return 0;
}
2.7. 重寫仿函式的例子
小頂堆:
#include #include using namespace std;
struct node
};struct cmp
};int main()
return 0;
}
參考: c priority queue 優先佇列
priority queue syntax in their implementation in the c standard template library,priority queues take three template parameters 1 2 template class t,c...
C Priority Queue 優先佇列
c 優先佇列類似佇列,但是在這個資料結構中的元素按照一定的斷言排列有序。它的標頭檔案為。由於介面卡不支援迭代,乙個 priority queue 將有沒有關聯的迭代器。函式列表 empty 如果優先隊列為空,則返回真 pop 刪除第乙個元素 push 加入乙個元素 size 返回優先佇列中擁有的元素...
C priority queue的模擬實現
priority queue 1 優先佇列是一種容器介面卡,根據嚴格的弱排序標準,它的第乙個元素總是它所包含的元素中最大的。2 此上下文類似於堆,在堆中可以隨時插入元素,並且只能檢索最大堆元素 優先佇列中位於頂部的元素 3 優先佇列被實現為容器介面卡,容器介面卡即將特定容器類封裝作為其底層容器類,q...