.NET中是否存在已排序的队列?

Mat*_*ley 9 c# collections

我需要一个相当专业的.NET集合,我不认为BCL可以帮助我,但我想如果有人知道类似的事情,我会把它扔出去.

基本上,我的要求是:

  • 我有一对值列表,例如:(3,10),(5,10),(3,7),(5,5)
  • 订单很重要,即.(3,10)!=(10,3)
  • 单个值的副本很好,但应删除重复对(最好是静默).
  • 踢球者是,我需要这个列表一直排序.我只对任何时候排序算法定义的列表中的第一个值感兴趣.

所以,我希望能够做的一些示例代码(正如我设想它可能会实现,其他适合上述的实现都很好):

public class Pair
{
    public Pair(int first, int second)
    { First = first; Second = second; }
    public int First { get; set; }
    public int Second { get; set; }
}

SortedQueue<Pair> foo = new SortedQueue<Pair>((left, right) => {
    return right.First - left.First;
});

foo.Add(new Pair(10, 3));
foo.Add(new Pair(4, 6));
foo.Add(new Pair(6, 15));
foo.Add(new Pair(6, 13)); // This shouldn't cause a problem

Pair current = foo.Shift(); // current = (4, 6)
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 11

我引用:

我需要这个列表一直排序.我只对任何时候排序算法定义的列表中的第一个值感兴趣.

这听起来像你想要一个排序队列而是一个优先级队列.如果性能是个问题,那么PQ肯定会更快,O(log n)vs O(n).但drop-duplicatelicates问题需要你保持一个并行的HashSet <>.

  • 请参阅".Net中的优先级队列",http://stackoverflow.com/questions/102398/priority-queue-in-net (6认同)

Vad*_*dim 5

你看过SortedDictionary还是SortedList

  • 有一秒钟,我以为我一定是盲目的.但是有一个问题,既不支持重复键,也是必需的. (3认同)