Приоритетная очередь в .Net
-
06-07-2019 - |
Вопрос
Возможный дубликат:
Приоритетная очередь в .Net
Этот вопрос похоже, но я хочу точно знать:
Есть ли какой-нибудь класс/структура/...в .Net для приоритетной очереди?Точно так же, как в STL, где есть priority_queue
для этого.Он принимает сравнение функция для поддержки индивидуальных сортировок.
Лучшее, что я нашел в .Net, это SortedList<Ключ, Значение> который сортирует значения по ключу.Одним из решений является реализация пользовательского Сравнивать интерфейс для класса Key.Но я не могу разделить свои элементы на пары ключ/значение.У меня есть атомарные элементы, которые должны быть поставлены в очередь в соответствии со своими значениями с помощью специальной функции.
Итак, есть ли в .Net какой-либо класс коллекции, который принимает функцию сравнения для сортировки его элементов?
Есть ли способ получить класс .Net (возможно, Хэшсет), который поддерживает эту функцию?
Примечание:
- Я знаю, что многие сторонние разработчики реализовали для этого действительно хорошие классы.Возможно, хорошим примером является PowerCollections.Но я хочу быстрое и простое решение, используя существующие классы в .Net.
- Я использую .Net Framework 3.5 и мне нравится C#;)
Решение
Вы можете использовать Сортированный словарь класс, который является универсальным.
Вы можете указать объект сравнения для конструктор, который должен обрабатывать сравнение приоритетов ваших объектов:
public class DataComparer : IComparer<Data>
{
public Int32 Compare(Data a, Data b)
{
if (a == null && b == null)
return 0;
if (a == null)
return -1;
if (b == null)
return +1;
return a.Priority.CompareTo(b.Priority);
}
}
SortedDictionary<Data, Data> priQueue = new SortedDictionary<Data, Data>(
new DataComparer());
Другие советы
Вы могли бы просто реализовать IComparable в своем классе и создать конкретный компаратор внутри своего класса, чтобы вы могли просто использовать IList.Sort() ?