priority_queue (STL/CLR)

このテンプレート クラスは、アクセスが制限された可変長の順序付き要素シーケンスを制御するオブジェクトを表します。 コンテナー アダプター priority_queue を使って、基になるコンテナーを優先キューとして管理します。

以降の説明では、GValueValue と同じですが、後者が ref 型の場合は Value^ となります。 以降の説明では、GContainerContainer と同じですが、後者が ref 型の場合は Container^ となります。

構文

template<typename Value,
    typename Container>
    ref class priority_queue
        System::ICloneable,
        Microsoft::VisualC::StlClr::IPriorityQueue<GValue, GContainer>
    { ..... };

パラメーター

Value
被制御シーケンス内の要素の型。

コンテナー
基になるコンテナーの型。

要件

ヘッダー:<cliext/queue>

名前空間: cliext

宣言

型の定義 説明
priority_queue::const_reference (STL/CLR) 要素への定数参照の型です。
priority_queue::container_type (STL/CLR) 基になるコンテナーの型。
priority_queue::difference_type (STL/CLR) 2 つの要素間の距離を表す、符号付きの型です。
priority_queue::generic_container (STL/CLR) コンテナー アダプターのジェネリック インターフェイスの型です。
priority_queue::generic_value (STL/CLR) コンテナー アダプターのジェネリック インターフェイスの要素の型です。
priority_queue::reference (STL/CLR) 要素への参照の型です。
priority_queue::size_type (STL/CLR) 2 つの要素間の距離を表す、符号付きの型です。
priority_queue::value_compare (STL/CLR) 2 つの要素の順序付けデリゲートです。
priority_queue::value_type (STL/CLR) 要素の型。
メンバー関数 説明
priority_queue::assign (STL/CLR) すべての要素を置換します。
priority_queue::empty (STL/CLR) 要素が存在しないかどうかをテストします。
priority_queue::get_container (STL/CLR) 基になるコンテナーにアクセスします。
priority_queue::pop (STL/CLR) 最高優先要素を削除します。
priority_queue::priority_queue (STL/CLR) コンテナー オブジェクトを構築します。
priority_queue::push (STL/CLR) 新しい要素を追加します。
priority_queue::size (STL/CLR) 要素の数をカウントします。
priority_queue::top (STL/CLR) 最高優先要素にアクセスします。
priority_queue::to_array (STL/CLR) 被制御シーケンスを新しい配列にコピーします。
priority_queue::value_comp (STL/CLR) 2 つの要素の順序付けデリゲートをコピーします。
プロパティ 説明
priority_queue::top_item (STL/CLR) 最高優先要素にアクセスします。
Operator 説明
priority_queue::operator= (STL/CLR) 被制御シーケンスを置き換えます。

インターフェイス

インターフェイス 説明
ICloneable オブジェクトを複製します。
IPriorityQueue<Value, Container> ジェネリック コンテナー アダプターを維持します。

解説

このオブジェクトは、Value の要素を格納し、必要に応じて拡張する、基になる型 Container のコンテナーを介して、制御するシーケンスのストレージを割り当てたり解放したりします。 シーケンスはヒープとして順序付けされて保持され、最も優先度の高い要素 (一番上の要素) に簡単にアクセスして削除できます。 オブジェクトにより、アクセスは新しい要素のプッシュと、最高優先度の要素だけのポップに制限され、優先キューが実装されます。

このオブジェクトでは、型 priority_queue::value_compare (STL/CLR) の格納されているデリゲート オブジェクトを呼び出すことで、制御するシーケンスを順序付けします。 priority_queue の構築時に、格納されているデリゲート オブジェクトを指定できます。デリゲート オブジェクトを指定しない場合、既定値は比較 operator<(value_type, value_type) です。 この格納されているオブジェクトにアクセスするには、メンバー関数 priority_queue::value_comp (STL/CLR)() を呼び出します。

このようなデリゲート オブジェクトでは、priority_queue::value_type (STL/CLR) 型の値に厳密な弱い順序付けを指定する必要があります。 つまり、任意の 2 つのキー XY については、次のようになります。

value_comp()(X, Y) は、すべての呼び出しで同じブール値の結果を返します。

value_comp()(X, Y) が true の場合は、value_comp()(Y, X) が false である必要があります。

value_comp()(X, Y) が true の場合、XY の前に順序付けられるものとされます。

!value_comp()(X, Y) && !value_comp()(Y, X) が true の場合、XY の順序付けが等しくなります。

被制御シーケンスで要素 XY の前に指定されている場合、key_comp()(Y, X) は false になります (既定のデリゲート オブジェクトの場合、キーの値が減少することはありません)。

したがって、最高優先要素は、他のどの要素の前にも順序付けされていない要素の 1 つになります。

基になるコンテナーは、ヒープとして順序付けされた要素を保持するので、次のようになります。

コンテナーは、ランダム アクセス反復子をサポートする必要があります。

同じ順序の要素は、プッシュされた順序とは異なる順序でポップされる場合があります。 (順序付けは安定していません)。

したがって、基になるコンテナーの候補には、deque (STL/CLR)vector (STL/CLR) が含まれます。

メンバー

priority_queue::assign (STL/CLR)

すべての要素を置換します。

構文

void assign(priority_queue<Value, Container>% right);

パラメーター

right
挿入するコンテナー アダプター。

解説

このメンバー関数は、right.get_container() を基になるコンテナーに割り当てます。 queue の内容全体を変更するには、これを使います。

// cliext_priority_queue_assign.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // assign a repetition of values
    Mypriority_queue c2;
    c2.assign(c1);
    for each (wchar_t elem in c2.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b
c a b

priority_queue::const_reference (STL/CLR)

要素への定数参照の型です。

構文

typedef value_type% const_reference;

解説

この型は、要素への定数参照を表します。

// cliext_priority_queue_const_reference.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display reversed contents " c b a"
    for (; !c1.empty(); c1.pop())
        {   // get a const reference to an element
        Mypriority_queue::const_reference cref = c1.top();
        System::Console::Write("{0} ", cref);
        }
    System::Console::WriteLine();
    return (0);
    }
c b a

priority_queue::container_type (STL/CLR)

基になるコンテナーの型。

構文

typedef Container value_type;

解説

この型は、テンプレート パラメーター Containerのシノニムです。

// cliext_priority_queue_container_type.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display contents " a b c" using container_type
    Mypriority_queue::container_type wc1 = c1.get_container();
    for each (wchar_t elem in wc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b

priority_queue::difference_type (STL/CLR)

2 つの要素間の符号付きの距離を表す型です。

構文

typedef int difference_type;

解説

この型は、場合によっては負の要素数を表します。

// cliext_priority_queue_difference_type.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // compute negative difference
    Mypriority_queue::difference_type diff = c1.size();
    c1.push(L'd');
    c1.push(L'e');
    diff -= c1.size();
    System::Console::WriteLine("pushing 2 = {0}", diff);

    // compute positive difference
    diff = c1.size();
    c1.pop();
    c1.pop();
    c1.pop();
    diff -= c1.size();
    System::Console::WriteLine("popping 3 = {0}", diff);
    return (0);
    }
c a b
pushing 2 = -2
popping 3 = 3

priority_queue::empty (STL/CLR)

要素が存在しないかどうかをテストします。

構文

bool empty();

解説

このメンバー関数は、被制御シーケンスが空の場合に true を返します。 これは priority_queue::size (STL/CLR)() == 0 と同じです。 priority_queue が空かどうかをテストする場合に使います。

// cliext_priority_queue_empty.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine("size() = {0}", c1.size());
    System::Console::WriteLine("empty() = {0}", c1.empty());

    // clear the container and reinspect
    c1.pop();
    c1.pop();
    c1.pop();
    System::Console::WriteLine("size() = {0}", c1.size());
    System::Console::WriteLine("empty() = {0}", c1.empty());
    return (0);
    }
c a b
size() = 3
empty() = False
size() = 0
empty() = True

priority_queue::generic_container (STL/CLR)

コンテナーのジェネリック インターフェイスの型です。

構文

typedef Microsoft::VisualC::StlClr::IPriorityQueue<Value>
    generic_container;

解説

この型は、このテンプレート コンテナー アダプター クラスのジェネリック インターフェイスを表します。

// cliext_priority_queue_generic_container.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct a generic container
    Mypriority_queue::generic_container^ gc1 = %c1;
    for each (wchar_t elem in gc1->get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // modify generic and display original
    gc1->push(L'd');
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // modify original and display generic
    c1.push(L'e');
    for each (wchar_t elem in gc1->get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b
c a b
d c b a
e d b a c

priority_queue::generic_value (STL/CLR)

コンテナーのジェネリック インターフェイスで使用する要素の型です。

構文

typedef GValue generic_value;

解説

この型は、このテンプレート コンテナー クラスのジェネリック インターフェイスで使用する、格納されている要素の値を記述する GValue 型のオブジェクトを表します。 (GValuevalue_type か、value_type が ref 型の場合は value_type^ のいずれかです)。

// cliext_priority_queue_generic_value.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // get interface to container
    Mypriority_queue::generic_container^ gc1 = %c1;
    for each (wchar_t elem in gc1->get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // display in priority order using generic_value
    for (; !gc1->empty(); gc1->pop())
        {
        Mypriority_queue::generic_value elem = gc1->top();

        System::Console::Write("{0} ", elem);
        }
    System::Console::WriteLine();
    return (0);
    }
c a b
c a b
c b a

priority_queue::get_container (STL/CLR)

基になるコンテナーにアクセスします。

構文

container_type get_container();

解説

このメンバー関数は、基になるコンテナーを返します。 コンテナー ラッパーによって強制される制限を回避するために使います。

// cliext_priority_queue_get_container.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b

priority_queue::operator= (STL/CLR)

被制御シーケンスを置き換えます。

構文

priority_queue <Value, Container>% operator=(priority_queue <Value, Container>% right);

パラメーター

right
コピーするコンテナー アダプター。

解説

このメンバー演算子を使用すると、right がオブジェクトにコピーされ、*this が返されます。 これを使用して、被制御シーケンスを right の被制御シーケンスのコピーと置き換えます。

// cliext_priority_queue_operator_as.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // assign to a new container
    Mypriority_queue c2;
    c2 = c1;
    for each (wchar_t elem in c2.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b
c a b

priority_queue::pop (STL/CLR)

最高優先要素を削除します。

構文

void pop();

解説

このメンバー関数は、被制御シーケンスの最高優先要素を削除します。これを空にすることはできません。 後ろの 1 つの要素分 queue を短くする場合に使います。

// cliext_priority_queue_pop.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // pop an element and redisplay
    c1.pop();
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b
b a

priority_queue::priority_queue (STL/CLR)

コンテナー アダプター オブジェクトを構築します。

構文

priority_queue();
priority_queue(priority_queue<Value, Container> right);
priority_queue(priority_queue<Value, Container> right);
explicit priority_queue(value_compare^ pred);
priority_queue(value_compare^ pred, container_type% cont);
template<typename InIt>
    priority_queue(InIt first, InIt last);
template<typename InIt>
    priority_queue(InIt first, InIt last,
        value_compare^ pred);
template<typename InIt>
    priority_queue(InIt first, InIt last,
        value_compare^ pred, container_type% cont);

パラメーター

cont
コピーするコンテナー。

first
挿入する範囲の先頭。

last
挿入する範囲の末尾。

pred
被制御シーケンスの順序付けの述語。

right
挿入するオブジェクトまたは範囲。

解説

コンストラクター:

priority_queue();

既定の順序付けの述語を使用して、空のラップされたコンテナーを作成します。 既定の順序付けの述語を使って、空の初期被制御シーケンスを指定する場合に使います。

コンストラクター:

priority_queue(priority_queue<Value, Container>% right);

順序付けの述語 right.value_comp() を使用して、right.get_container() のコピーであるラップされたコンテナーを作成します。 同じ順序付けの述語を使って、キュー オブジェクト right によって制御されるシーケンスのコピーである、初期被制御シーケンスを指定する場合に使用します。

コンストラクター:

priority_queue(priority_queue<Value, Container>^ right);

順序付けの述語 right->value_comp() を使用して、right->get_container() のコピーであるラップされたコンテナーを作成します。 同じ順序付けの述語を使って、キュー オブジェクト *right によって制御されるシーケンスのコピーである、初期被制御シーケンスを指定する場合に使用します。

コンストラクター:

explicit priority_queue(value_compare^ pred);

順序付けの述語 pred を使用して、空のラップされたコンテナーを作成します。 それを使って、指定した順序付けの述語で、空の初期被制御シーケンスを指定します。

コンストラクター:

priority_queue(value_compare^ pred, container_type cont);

順序付けの述語 pred を使って、空のラップされたコンテナーを作成してから、cont のすべての要素をプッシュします。それを使って、指定した順序付けの述語で、既存のコンテナーから初期被制御シーケンスを指定します。

コンストラクター:

template<typename InIt> priority_queue(InIt first, InIt last);

既定の順序付けの述語を使用して、空のラップされたコンテナーを作成した後、シーケンス [first, last) をプッシュします。 それを使って、指定した順序付けの述語で、指定したシーケンスから初期被制御シーケンスを指定します。

コンストラクター:

template<typename InIt> priority_queue(InIt first, InIt last, value_compare^ pred);

順序付けの述語 pred を使用して、空のラップされたコンテナーを作成した後、シーケンス [first, last) をプッシュします。 それを使って、指定した順序付けの述語で、指定したシーケンスから初期被制御シーケンスを指定します。

コンストラクター:

template<typename InIt> priority_queue(InIt first, InIt last, value_compare^ pred, container_type% cont);

順序付けの述語 pred を使用して、空のラップされたコンテナーを作成した後、cont のすべての要素に加えて、シーケンス [first, last) をプッシュします。 それを使って、指定した順序付けの述語で、既存のコンテナーと指定したシーケンスから初期被制御シーケンスを指定します。

// cliext_priority_queue_construct.cpp
// compile with: /clr
#include <cliext/queue>
#include <cliext/deque>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
typedef cliext::deque<wchar_t> Mydeque;
int main()
    {
// construct an empty container
    Mypriority_queue c1;
    Mypriority_queue::container_type^ wc1 = c1.get_container();
    System::Console::WriteLine("size() = {0}", c1.size());

    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');
    for each (wchar_t elem in wc1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an ordering rule
    Mypriority_queue c2 = cliext::greater<wchar_t>();
    System::Console::WriteLine("size() = {0}", c2.size());

    for each (wchar_t elem in wc1)
        c2.push(elem);
    for each (wchar_t elem in c2.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an ordering rule by copying an underlying container
    Mypriority_queue c2x =
        gcnew Mypriority_queue(cliext::greater<wchar_t>(), *wc1);
   for each (wchar_t elem in c2x.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an iterator range
    Mypriority_queue c3(wc1->begin(), wc1->end());
    for each (wchar_t elem in c3.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an iterator range and an ordering rule
    Mypriority_queue c4(wc1->begin(), wc1->end(),
        cliext::greater<wchar_t>());
    for each (wchar_t elem in c4.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an iterator range, another container, and an ordering rule
    Mypriority_queue c5(wc1->begin(), wc1->end(),
        cliext::greater<wchar_t>(), *wc1);
    for each (wchar_t elem in c5.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct from a generic container
    Mypriority_queue c6(c3);
    for each (wchar_t elem in c6.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct by copying another container
    Mypriority_queue c7(%c3);
    for each (wchar_t elem in c7.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // construct with an ordering rule, by copying an underlying container
    Mypriority_queue c8 =
        gcnew Mypriority_queue(cliext::greater<wchar_t>(), *wc1);
    for each (wchar_t elem in c8.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    return (0);
    }
size() = 0
c a b
size() = 0
a c b
a c b
c a b
a c b
a a b c c b
c a b
c a b
a c b

priority_queue::push (STL/CLR)

新しい要素を追加します。

構文

void push(value_type val);

解説

このメンバー関数は、被制御シーケンスに値 val を持つ要素を挿入し、ヒープの統制が維持されるように被制御シーケンスを並べ替えます。 それを使用して、キューに別の要素を追加します。

// cliext_priority_queue_push.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b

priority_queue::reference (STL/CLR)

要素への参照の型です。

構文

typedef value_type% reference;

解説

この型は、要素への参照を表します。

// cliext_priority_queue_reference.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // modify top of priority_queue and redisplay
    Mypriority_queue::reference ref = c1.top();
    ref = L'x';
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b
x a b

priority_queue::size (STL/CLR)

要素の数をカウントします。

構文

size_type size();

解説

このメンバー関数は、被制御シーケンスの長さを返します。 被制御シーケンス内の現在の要素の数を特定する場合に使います。 シーケンスのサイズが 0 以外かどうかだけを確認する場合は、「priority_queue::empty (STL/CLR)()」を参照してください。

// cliext_priority_queue_size.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    System::Console::WriteLine("size() = {0} starting with 3", c1.size());

    // pop an item and reinspect
    c1.pop();
    System::Console::WriteLine("size() = {0} after popping", c1.size());

    // add two elements and reinspect
    c1.push(L'a');
    c1.push(L'b');
    System::Console::WriteLine("size() = {0} after adding 2", c1.size());
    return (0);
    }
c a b
size() = 3 starting with 3
size() = 2 after popping
size() = 4 after adding 2

priority_queue::size_type (STL/CLR)

2 つの要素間の距離を表す符号付きの型です。

構文

typedef int size_type;

解説

この型は、負でない要素数を表します。

// cliext_priority_queue_size_type.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // compute positive difference
    Mypriority_queue::size_type diff = c1.size();
    c1.pop();
    c1.pop();
    diff -= c1.size();
    System::Console::WriteLine("size difference = {0}", diff);
    return (0);
    }
c a b
size difference = 2

priority_queue::to_array (STL/CLR)

被制御シーケンスを新しい配列にコピーします。

構文

cli::array<Value>^ to_array();

解説

このメンバー関数は、被制御シーケンスを含む配列を返します。 配列形式の被制御シーケンスのコピーを取得する場合に、これを使用します。

// cliext_priority_queue_to_array.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // copy the container and modify it
    cli::array<wchar_t>^ a1 = c1.to_array();

    c1.push(L'd');
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // display the earlier array copy
    for each (wchar_t elem in a1)
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
d c b a
c a b

priority_queue::top (STL/CLR)

最高優先要素にアクセスします。

構文

reference top();

解説

このメンバー関数は、被制御シーケンスの先頭 (最高優先) の要素への参照を返します。被制御シーケンスを空にすることはできません。 最高優先要素が存在することがわかっているとき、それにアクセスするために使用します。

// cliext_priority_queue_top.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect last item
    System::Console::WriteLine("top() = {0}", c1.top());

    // alter last item and reinspect
    c1.top() = L'x';
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }

priority_queue::top_item (STL/CLR)

最高優先要素にアクセスします。

構文

property value_type back_item;

解説

このプロパティは、被制御シーケンスの先頭 (最高優先) の要素にアクセスします。被制御シーケンスが空であってはなりません。 最高優先要素が存在することがわかっているとき、それを読み書きするために使用します。

// cliext_priority_queue_top_item.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display initial contents " a b c"
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();

    // inspect last item
    System::Console::WriteLine("top_item = {0}", c1.top_item);

    // alter last item and reinspect
    c1.top_item = L'x';
    for each (wchar_t elem in c1.get_container())
        System::Console::Write("{0} ", elem);
    System::Console::WriteLine();
    return (0);
    }
c a b
top_item = c
x a b

priority_queue::value_comp (STL/CLR)

2 つの要素の順序付けデリゲートをコピーします。

構文

value_compare^ value_comp();

解説

このメンバー関数は、被制御シーケンスの順序付けに使用される順序付けデリゲートを返します。 これを使用して、2 つの値を比較します。

// cliext_priority_queue_value_comp.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    Mypriority_queue::value_compare^ vcomp = c1.value_comp();

    System::Console::WriteLine("compare(L'a', L'a') = {0}",
        vcomp(L'a', L'a'));
    System::Console::WriteLine("compare(L'a', L'b') = {0}",
        vcomp(L'a', L'b'));
    System::Console::WriteLine("compare(L'b', L'a') = {0}",
        vcomp(L'b', L'a'));
    System::Console::WriteLine();

    // test a different ordering rule
    Mypriority_queue c2 = cliext::greater<wchar_t>();
    vcomp = c2.value_comp();

    System::Console::WriteLine("compare(L'a', L'a') = {0}",
        vcomp(L'a', L'a'));
    System::Console::WriteLine("compare(L'a', L'b') = {0}",
        vcomp(L'a', L'b'));
    System::Console::WriteLine("compare(L'b', L'a') = {0}",
        vcomp(L'b', L'a'));
    return (0);
    }
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False

compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True

priority_queue::value_compare (STL/CLR)

2 つの値の順序付けデリゲートです。

構文

binary_delegate<value_type, value_type, int> value_compare;

解説

この型は、1 番目の引数が 2 番目より前の順序かどうかを判定するデリゲートの同意語です。

// cliext_priority_queue_value_compare.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    Mypriority_queue::value_compare^ vcomp = c1.value_comp();

    System::Console::WriteLine("compare(L'a', L'a') = {0}",
        vcomp(L'a', L'a'));
    System::Console::WriteLine("compare(L'a', L'b') = {0}",
        vcomp(L'a', L'b'));
    System::Console::WriteLine("compare(L'b', L'a') = {0}",
        vcomp(L'b', L'a'));
    System::Console::WriteLine();

    // test a different ordering rule
    Mypriority_queue c2 = cliext::greater<wchar_t>();
    vcomp = c2.value_comp();

    System::Console::WriteLine("compare(L'a', L'a') = {0}",
        vcomp(L'a', L'a'));
    System::Console::WriteLine("compare(L'a', L'b') = {0}",
        vcomp(L'a', L'b'));
    System::Console::WriteLine("compare(L'b', L'a') = {0}",
        vcomp(L'b', L'a'));
    return (0);
    }
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False

compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True

priority_queue::value_type (STL/CLR)

要素の型。

構文

typedef Value value_type;

解説

この型は、テンプレート パラメーター Value のシノニムです。

// cliext_priority_queue_value_type.cpp
// compile with: /clr
#include <cliext/queue>

typedef cliext::priority_queue<wchar_t> Mypriority_queue;
int main()
    {
    Mypriority_queue c1;
    c1.push(L'a');
    c1.push(L'b');
    c1.push(L'c');

    // display reversed contents " a b c" using value_type
    for (; !c1.empty(); c1.pop())
        {   // store element in value_type object
        Mypriority_queue::value_type val = c1.top();

        System::Console::Write("{0} ", val);
        }
    System::Console::WriteLine();
    return (0);
    }
c b a