C++ priority_queue用法
阿新 • • 發佈:2018-12-08
std::priority_queue
template <class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;
C++ STL預設的priority_queue是將優先順序最大的放在佇列最前面,也即是最大堆.
【程式碼示例】
#include <iostream> #include <string> #include <algorithm> #include <vector> #include <map> #include <unordered_map> #include <string> #include <queue> using namespace std; /** 預設比較函式為less, 大頂堆 **/ void defaultCmpLess() { cout << "=========defaultCmpLess(big heap)========" << endl; priority_queue<int> q; for (int i = 0; i < 10; i++) { q.push(rand()%20); } while (!q.empty()) { cout << q.top() << " "; q.pop(); } cout <<endl; } /** 使用greater比較函式,小頂堆 **/ void useCmpGreater() { cout << "=========useCmpGreater(small heap)========" << endl; priority_queue<int, vector<int>, greater<int> > q; for (int i = 0; i < 10; i++) { q.push(rand()%20); } while (!q.empty()) { cout << q.top() << " "; q.pop(); } cout <<endl; } //========================= /** 自構建比較函式 **/ struct cmp2 { bool operator()(int a, int b) { return a < b; } }; void designCmp() { cout << "=========designCmp========" << endl; cout << "operator a<b" << endl; priority_queue<int, vector<int>, cmp2 > q; for (int i = 0; i < 10; i++) { q.push(rand()%20); } while (!q.empty()) { cout << q.top() << " "; q.pop(); } cout <<endl; } int main(int argc, char const *argv[]) { defaultCmpLess(); useCmpGreater(); designCmp(); } /** =========defaultCmpLess(big heap)======== 18 18 13 12 10 9 9 7 4 3 =========useCmpGreater(small heap)======== 0 0 2 3 5 7 7 9 12 12 =========designCmp======== operator a<b 17 16 14 13 12 11 8 7 5 5