Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpCqPq 88 of 509 menu
◀ ▶

PriorityQueue в C#

Класс PriorityQueue<TElement, TPriority> хранит пару из элемента и числа-приоритета. При извлечении возвращается элемент с наименьшим приоритетом: меньшее число означает более срочное дело.

Очередь не выстраивает элементы в готовый список заранее. Добавление и извлечение занимают O(log n).

Приоритеты 5 и 20 меньше, чем 30 у "low", поэтому "low" выйдет последним:

using System.Collections.Generic; var urgent = new PriorityQueue<string, int>(); urgent.Enqueue("low", 30); urgent.Enqueue("high", 5); urgent.Enqueue("mid", 20); Console.WriteLine(urgent.Dequeue()); // выведет "high" Console.WriteLine(urgent.Dequeue()); // выведет "mid"

Чтобы первым выходил элемент с наибольшим числом, в конструктор передают обратный компаратор. В консоли 2 - у этого элемента приоритет 40:

using System.Collections.Generic; var byDesc = new PriorityQueue<int, int>( Comparer<int>.Create((a, b) => b.CompareTo(a))); byDesc.Enqueue(1, 10); byDesc.Enqueue(2, 40); Console.WriteLine(byDesc.Dequeue()); // выведет 2

Поставьте в очередь пациентов "Ann", "Ben" и "Cara" с разной срочностью: меньшее число означает более срочный приём. Выведите имя того, кого вызовут первым, и того, кого вызовут вторым.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить