priority_Queue優先キューは小さい順に

2062 ワード

C++優先キューの基本的な使用方法優先キューでは、優先度の高い要素が先にキューから出ます.標準ライブラリのデフォルトでは、要素タイプの優先キューを使用する最初の方法であり、最も一般的な方法でもあります.
priority_queue qi;
以上より、実施例1における出力結果は、9 6 5 3 2である
第2の方法:例1では、要素を小さいものから大きいものに出力するにはどうすればいいですか.このときfunctionalを用いる比較関数を入力することができる.h関数オブジェクトを比較関数とする.
priority_queueint>, greater>qi2;
2番目のパラメータはコンテナタイプです.2番目のパラメータは比較関数です.従って、例2の出力結果は、2 3 5 6 9である
3つ目の方法:優先度をカスタマイズします.
struct node
{
    friend bool operator< (node n1, node n2)
    {
        return n1.priority < n2.priority;
    }
    int priority;
    int value;
};

この構造ではvalueが値であり、priorityが優先度である.カスタムoperatorによって例3に出力された結果は、優先度値9 5 8 2 6 1 2 3 1 4ですが、構造定義が次のように定義されている場合は、
struct node
{
    friend bool operator> (node n1, node n2)
    {
        return n1.priority > n2.priority;
    }
    int priority;
    int value;
};

標準ライブラリではデフォルトで要素タイプが使用されており、カスタムタイプのオペレータは直接接続されていないため、コンパイルできません.
//コードリスト
#include
#include
#include
using Namespace stdnamespace std;
struct node
{
    friend bool operator< (node n1, node n2)
    {
        return n1.priority < n2.priority;
    }
    int priority;
    int value;
};
int main()
{
    const int len = 5;
    int i;
    int a[len] = {3,5,9,6,2};
    //  1
    priority_queue qi;
    for(i = 0; i < len; i++)
        qi.push(a[i]);
    for(i = 0; i < len; i++)
    {
        cout<, greater >qi2;
    for(i = 0; i < len; i++)
        qi2.push(a[i]);
    for(i = 0; i < len; i++)
    {
        cout< qn;
    node b[len];
    b[0].priority = 6; b[0].value = 1; 
    b[1].priority = 9; b[1].value = 5; 
    b[2].priority = 2; b[2].value = 3; 
    b[3].priority = 8; b[3].value = 2; 
    b[4].priority = 1; b[4].value = 4; 

    for(i = 0; i < len; i++)
        qn.push(b[i]);
    cout<