代码之家  ›  专栏  ›  技术社区  ›  Johann Gerell

为什么.NET框架没有优先级队列类?

  •  20
  • Johann Gerell  · 技术社区  · 15 年前

    堆栈溢出上有一些线程处理实现 priority queues in .Net and C# .

    我的问题更基本: 为什么.NET框架中没有现成的优先级队列? 甚至C++标准库也有一个。

    2 回复  |  直到 12 年前
        1
  •  12
  •   Community kfsone    7 年前

    刚才有个问题( why C# does allow non-member functions like C++ )这促使埃里克·利珀特写了一篇 blog post 关于原因。他解释说:

    我被问到“为什么不实现特性X?”总是。答案总是一样的:因为从来没有人设计、指定、实现、测试、记录和发布过这个特性。所有这六件事都是实现一个特性所必需的。所有这些都花费了大量的时间、精力和金钱。功能并不便宜,我们努力确保我们只提供那些功能,因为我们的时间、精力和金钱预算有限,这些功能会给我们的用户带来最大的好处。

    犯罪嫌疑人 这可能就是.NET为什么不与优先级队列一起发送的答案-只是时间、精力、金钱、需求不足(?)实现一个。

        2
  •  4
  •   Mark Rendle    15 年前

    .NET 4.0引入了 SortedSet<T> 课程,以及 ISet<T> 接口由 排序集<t> HashSet<T> . 这显然会使实现自己的 PriorityQueue<T> 班级。

    但是,仍然没有 IQueue<T> 接口,它至少承认需要优先级队列或基本BCL以外的任何其他实现 Queue<T> .同样,没有 IStack<T> .

    我个人认为,缺少这些最基本的接口是令人失望和短视的,尤其是从现有类中提取简单接口的设计/规范/实现/测试/文档成本应该非常低。

    public interface IQueue<T> : IEnumerable<T>, ICollection, IEnumerable
    {
        T Dequeue();
        void Enqueue(T item);
        T Peek();
    }
    

    看到了吗?我做到了。