代码之家  ›  专栏  ›  技术社区  ›  Isaac

.NET中的优先级队列[重复]

  •  3
  • Isaac  · 技术社区  · 15 年前

    可能重复:
    Priority queue in .Net

    This question 类似,但我想确切地知道:

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

    我在.NET中发现的最好的东西是 排序列表<键,值> 按键对值进行排序。所以一个解决方案是实现一个自定义 比较 键类的接口。但我不能将元素分隔成键/值对。我有一些原子元素必须根据它们的值用自定义函数排队。

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

    是否有任何方法可以派生.NET类(可能 哈希表 )是否支持此功能?


    注:

    • 我知道许多第三方为此实施了非常好的类。也许一个很好的例子是 PowerCollections . 但我希望使用.NET中现有类的快速简单的解决方案
    • 我使用的是.NET Framework 3.5,类似于C)
    2 回复  |  直到 15 年前
        1
  •  3
  •   Lasse V. Karlsen    15 年前

    你可以使用 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());
    
        2
  •  1
  •   Russ Clarke    15 年前

    您可以在类上实现IComparable并在类内创建特定的比较器,这样您就可以只使用ilist.sort()?