C++ priority_queue用法

C++ priority_queue用法

知識標籤:STL, adapter, C++

code

#include<iostream>
#include<queue>
#include<string.h>

struct node
{
    //默認比較方式
    friend bool operator<(node n1, node n2)
    {
        return n1.priority<n2.priority;
    }
    friend bool operator>(node n1, node n2)
    {
        return n1.priority>n2.priority;
    }
    int priority;
    char value[20];
};

int main(void)
{
    const int len = 5;
    int i;
    int a[len] = {3, 5, 9, 6, 2};

    //示例1
    //priority_queue<int>省略了2個參數,第二個參數爲容器類型,第三個爲比較方式
    //默認的容器類型爲vector,本例中爲vector<int>
    //比較方式默認爲operator<,故默認優先隊列是大頂堆
    std::priority_queue<int> qi;
    for(i = 0; i < len; ++i)
        qi.push(a[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi.top() << " ";
        qi.pop();
    }
    std::cout << std::endl;

    //示例2
    //STL中定義了一個仿函數greater<>,可以用它聲明小頂堆
    //priority_queue根據給定的比較規則(即第三個參數)利用堆對第二個參數vector中的元素進行排序
    std::priority_queue<int, std::vector<int>, std::greater<int> > qi2;
    for(i = 0; i < len; ++i)
        qi2.push(a[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi2.top() << " ";
        qi2.pop();
    }
    std::cout << std::endl;

    //示例3
    std::priority_queue<node> qi3;
    node b[len];
    b[0].priority = 6; strcpy(b[0].value, "小明");
    b[1].priority = 9; strcpy(b[1].value, "小花");
    b[2].priority = 2; strcpy(b[2].value, "小李");
    b[3].priority = 8; strcpy(b[3].value, "小紅");
    b[4].priority = 1; strcpy(b[4].value, "小王");

    for(i = 0; i < len; ++i)
        qi3.push(b[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi3.top().priority << "\t" << qi3.top().value << std::endl;
        qi3.pop();
    }

    //示例4
    std::cout << "-----------------------------" << std::endl;
    std::priority_queue<node, std::vector<node>, std::greater<node> > qi4;
    for(i = 0; i < len; ++i)
        qi4.push(b[i]);
    for(i = 0; i < len; ++i)
    {
        std::cout << qi4.top().priority << "\t" << qi4.top().value << std::endl;
        qi4.pop();
    }

    return 0;
}

結果

這裏寫圖片描述

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