なんかいろいろと書いてくブログ

関東のどこかで働く、一般人

【C#】PriorityQueue

先日書いた DateOny、TimeOnly と同様に .NEt 6から新規追加されたクラスとして PriorityQueue<TElement,TPriority>が実装されました

直訳すると優先度付きキュー
引数として、TPriority が存在しており、 キューの優先度を設定できるようになっています

公式ドキュメント

https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.priorityqueue-2

通常の Queue

public void Queue()
{
    Queue<int> queue = new();

    queue.Enqueue(1);
    queue.Enqueue(2);
    queue.Enqueue(3);
    queue.Enqueue(4);
    queue.Enqueue(5);

    while(queue.TryDequeue(out int q))
    {
        Console.WriteLine($"Queue value {q}");
        // Queue value 1
        // Queue value 2
        // Queue value 3
        // Queue value 4
        // Queue value 5
    }
}

Queue に 1~5 の数字を順に詰めた変数queueに対して TryDequeue に失敗するまで順に処理しています

通常は優先度はないので上から順番に処理されています

PriorityQueue

public void PriorityQueue()
{
    // 第2引数に優先度を設定する
    PriorityQueue<int, int> queue = new();

    queue.Enqueue(1, 2);
    queue.Enqueue(2, 1);
    queue.Enqueue(3, 4);
    queue.Enqueue(4, 3);
    queue.Enqueue(5, 5);

    while (queue.TryDequeue(out int q, out int priority))
    {
        Console.WriteLine($"Queue value {q}, priority {priority}");
        // Queue value 2, priority 1
        // Queue value 1, priority 2
        // Queue value 4, priority 3
        // Queue value 3, priority 4
        // Queue value 5, priority 5
    }
}

PriorityQueue に 1~5 の数字を Priority とともに詰めた変数queueに対して
TryDequeue に失敗するまで順に処理しています

設定した Priority の順序で Queue の処理がされています