首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么.Net框架没有优先级队列类?

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

Stack Overflow用户
提问于 2009-12-14 17:33:16
回答 6查看 4.3K关注 0票数 24

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

我的问题是一个更基本的问题:为什么.Net框架中没有开箱即用的优先级队列?甚至C++标准库都有一个。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-12-14 17:57:28

不久前有一个问题(why C# does allow non-member functions like C++)促使Eric Lippert写了一篇关于原因的blog post。在书中,他解释道:

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

我怀疑这可能就是为什么.Net没有提供优先级队列的原因--没有足够的时间、精力、金钱和需求(?)来实现一个。

票数 12
EN

Stack Overflow用户

发布于 2009-12-14 18:29:26

.NET 4.0引入了一个SortedSet<T>类,以及由SortedSet<T>HashSet<T>实现的ISet<T>接口。这显然会使实现您自己的PriorityQueue<T>类变得更简单。

然而,仍然没有IQueue<T>接口,这至少会承认除了基本的BCL Queue<T>之外还需要优先级队列或任何其他实现。同样,也没有IStack<T>

就我个人而言,我发现缺少一些最基本的接口是令人失望和目光短浅的,特别是从现有类中提取一个简单接口的design/specification/implementation/testing/documentation成本应该非常低。

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

看到了吗?我已经做到了。

票数 5
EN

Stack Overflow用户

发布于 2021-04-09 12:28:30

这是官方的announced版本,并在.NET 6预览版中发布。

PriorityQueue (System.Collections.Generic)是一个新的集合,它允许添加具有值和优先级的新项目。出队时,PriorityQueue返回具有最低优先级值的元素。您可以认为这个新集合类似于Queue,但是每个入队的元素都有一个影响出队行为的优先级值。

下面的示例演示了PriorityQueue的行为。

//创建具有整数优先级的字符串的优先级队列var pq = new PriorityQueue();//将具有关联优先级的元素入队pq.Enqueue( "A“,3);pq.Enqueue( "B”,1);pq.Enqueue( "C“,2);pq.Enqueue("D",3);pq.Dequeue();//返回”B“pq.Dequeue();//返回”C“pq.Dequeue();//无论是”A“还是"D",不保证稳定性。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1899905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档