C/C++ | STL | 大頂堆 | 小頂堆 | std::priority_queue

優先隊列 priority_queue

優先隊列是容器適配器的一種類型,特別設計爲它的第一個元素總是它包含的元素中最大的元素,根據一些嚴格的弱順序標準。

這個上下文類似於堆,在堆中可以隨時插入元素,並且只能檢索最大堆元素(優先級隊列頂部的元素)。

優先級隊列被實現爲容器適配器,這些適配器類使用特定容器類的封裝對象作爲其底層容器,提供一組特定的成員函數來訪問其元素。元素從特定容器的“後面”彈出,該容器稱爲優先級隊列的頂部。

底層容器可以是任何標準容器類模板,也可以是其他特定設計的容器類。容器應通過隨機訪問迭代器訪問,並支持以下操作:

  1. empty() 如果優先隊列爲空,則返回真
  2. pop() 刪除第一個元素
  3. push() 加入一個元素
  4. size() 返回優先隊列中擁有的元素的個數
  5. top() 返回優先隊列中有最高優先級的元素

標準容器類vector和deque滿足這些需求。默認情況下,如果沒有爲特定的priority_queue類實例化指定容器類,則使用標準容器向量。

任何時候都需要支持隨機訪問迭代器,以便在內部保持堆結構。這是由容器適配器通過在需要時自動調用算法函數make_heap、push_heap和pop_heap來自動完成的。

大頂堆:


    priority_queue<int> q;
    for( int i= 0; i< 10; ++i ) q.push(i);
    while( !q.empty() ){
        cout<<q.top()<<endl;
        q.pop();
    }
    

小頂堆


    priority_queue<int, vector<int>, greater<int> > q;
    for( int i= 0; i< 10; ++i ) q.push(10-i);
    while( !q.empty() ){
        cout << q.top() << endl;
        q.pop();
    }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章