C# 优先级队列

标签 c# data-structures queue

我正在寻找具有如下接口(interface)的优先级队列:

class PriorityQueue<T>
{
    public void Enqueue(T item, int priority)
    {
    }

    public T Dequeue()
    {
    }
}

我见过的所有实现都假设 item 是一个 IComparable 但我不喜欢这种方法;我想在将它插入队列时指定优先级。

如果不存在现成的实现方式,那么自己动手的最佳方式是什么?我应该使用什么底层数据结构?某种自平衡树,还是什么?标准的 C#.net 结构会很好。

最佳答案

如果您有一个基于 IComparable 的现有优先级队列实现,您可以轻松地使用它来构建您需要的结构:

public class CustomPriorityQueue<T>  // where T need NOT be IComparable
{
  private class PriorityQueueItem : IComparable<PriorityQueueItem>
  {
    private readonly T _item;
    private readonly int _priority:

    // obvious constructor, CompareTo implementation and Item accessor
  }

  // the existing PQ implementation where the item *does* need to be IComparable
  private readonly PriorityQueue<PriorityQueueItem> _inner = new PriorityQueue<PriorityQueueItem>();

  public void Enqueue(T item, int priority)
  {
    _inner.Enqueue(new PriorityQueueItem(item, priority));
  }

  public T Dequeue()
  {
    return _inner.Dequeue().Item;
  }
}

关于C# 优先级队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1937690/

相关文章:

queue - 替换 jms 队列中的消息

c# - 从具有多种用途对象的通用列表中选择或排序 C#

algorithm - 有没有办法在不找到集合中的最大整数的情况下将集合中的整数之和约束为(0,1)?

c++ - Skiplast 随机函数需要解释

arrays - 数据结构的选择

Java队列和线程安全

c# - 为什么 integer == null 在 C# 中是一个有效的 boolean 表达式?

c# - 在C#中将条件语句放在静态类中

c# - 正则表达式:解析街道名称/号码

c - 链表 - 如何在不移动头节点的情况下插入尾部