3

可能重复:
.Net 中的优先级队列

这个问题很相似,但我想确切地知道:

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

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

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

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


笔记:

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

2 回答 2

3

您可以使用通用的SortedDictionary类。

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

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());
于 2009-10-26T11:44:39.373 回答
1

你可以在你的类上实现 IComparable 并在你的类中创建特定的比较器,这样你就可以使用 IList.Sort() 吗?

于 2009-10-26T11:28:33.560 回答