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" с разной срочностью: меньшее число означает более срочный приём. Выведите имя того, кого вызовут первым, и того, кого вызовут вторым.