c# - .Net 中的优先级队列

标签 c# .net priority-queue

<分区>

Possible Duplicate:
Priority queue in .Net

This question是相似的,但我想确切地知道:

.Net 中是否有用于优先级队列的类/结构/...?就像在具有 priority_queue 的 STL 中一样。它接受一个比较函数以支持自定义排序。

我在 .Net 中发现的最好的东西是 SortedList< Key, Value >,它按 Key 对其值进行排序。因此,一种解决方案是为 Key 类实现自定义 Compare 接口(interface)。但是我不能将我的元素分成键/值对。我有一些原子元素,它们必须使用自定义函数根据它们的值进行排队。

那么,.Net 中是否有任何集合类接受用于对元素进行排序的比较函数?

有什么方法可以派生支持此功能的 .Net 类(可能是 HashSet)?


备注:

  • 我知道许多第三方为此实现了非常好的类。也许一个很好的例子是 PowerCollections .但我想使用 .Net 中的现有类快速简单地解决方案
  • 我正在使用 .Net Framework 3.5

最佳答案

您可以使用 SortedDictionary类,这是通用的。

您可以为 constructor 指定一个比较器对象,它应该处理对象的优先级比较:

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());

关于c# - .Net 中的优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1624279/

相关文章:

.net - ASP.NET 中文本框的自动完成搜索组件

c++ - 与 priority_queue 中的第三个变量进行比较,c++

c++ - 如何在 Omnet++ 中将 cQueue 实现为优先级队列?

C# 将格式化字符串 (31.2k) 转换回数字 (31240)

c# - 如何检查用户id已经存在

c# - 递归局部 View

c# - 从另一个类(在另一个线程上)写在文本框中

c# - 在图片框中打开之前如何调整图像大小

c# - 在 Linq select 子句中重用表达式(查询格式)

java - 带有 PriorityBlockingQueue 的 NullPointerException