【发布时间】:2010-12-28 14:30:27
【问题描述】:
我正在寻找具有如下界面的优先级队列:
class PriorityQueue<T>
{
public void Enqueue(T item, int priority)
{
}
public T Dequeue()
{
}
}
我见过的所有实现都假设item 是IComparable,但我不喜欢这种方法;我想在将其推入队列时指定优先级。
如果不存在现成的实现,那么我自己执行此操作的最佳方法是什么?我应该使用什么底层数据结构?某种自平衡树,还是什么?一个标准的 C#.net 结构会很好。
【问题讨论】:
-
你打算从多个线程调用它吗?
-
@sohum: 不...我的程序是线程的,但只有一个线程需要访问它。
-
T 支持 IComparable 立即浮现在脑海的原因是,如果您将两个项目以优先级 2 推入队列,您仍然需要比较项目并决定处理这两个优先级的顺序两个项目。 . .所以最终你需要 T 具有可比性。那么如何使用您的界面来做到这一点......好吧,您在下面有一些很好的建议。
-
@Jason:这不会违背优先级队列的目的吗?这是一个队列,因为第一个进来的就是第一个出去的。就是这样决定的。否则它只是一个排序列表。
-
@Jason D:如果所有键都相同,那么优先级队列应该退化为 FIFO 队列。如果正在使用项目的顺序,那么这将被违反。因此,任何依赖于项目顺序的优先级队列的实现都是可疑的。
标签: c# data-structures queue