.Net中的优先级队列

时间:2009-10-26 11:24:44

标签: c# .net priority-queue

  

可能重复:
  Priority queue in .Net

This question类似,但我想知道:

.Net中是否有优先级队列的class / struct / ...就像STL中有priority_queue一样。它接受比较功能来支持自定义排序。

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

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

有没有办法派生支持此功能的.Net类(可能是 HashSet )?


注意:

  • 我知道许多第三方为此实施了非常好的课程。也许一个很好的例子是PowerCollections。但我希望使用.Net
  • 中的现有类快速简单的解决方案
  • 我正在使用.Net Framework 3.5和C#;)

2 个答案:

答案 0 :(得分:3)

您可以使用通用的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());

答案 1 :(得分:1)

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