在c#中使用排序字典从优先级队列中取出队列

本文关键字:队列 优先级 排序 字典 | 更新日期: 2023-09-27 17:49:17

我有一个排序字典的形式:

SortedDictionary<PriorityType, List<T>> dictionary;

其中priitytype是一个enum类。

现在我正试图使优先队列方法,但我有关于我的Dequeue方法是否会工作的忧虑。

public T Dequeue()
    {
        if (IsEmpty())
        {
            throw new Exception("The Priority Queue is empty! Dequeuing is not possible!");
        }
        var highestPriorityList = dictionary[dictionary.Keys.First()];
        var topElement = highestPriorityList.FirstOrDefault();
        if (highestPriorityList.Count == 0)
        {
            dictionary.Remove(dictionary.Keys.First());
        }
        highestPriorityList.RemoveAt(0);
        return topElement;
    }

请帮我改进一下这个方法!

注意:Dequeue()方法应该移除并返回优先级最高的对象,并且在具有相同优先级的其他元素之前。

在c#中使用排序字典从优先级队列中取出队列

好了,所以我能够修改上面的代码以适应我的脱队列操作!

public T Dequeue()
    {
        var highestPriorityList = dictionary[dictionary.Keys.First()];
        if (highestPriorityList.Count == 0)
        {
            dictionary.Remove(dictionary.Keys.First());
        }
        var topElement = highestPriorityList.First();
        highestPriorityList.Remove(topElement);
        return topElement;
    }

现在我可以脱队列,只要我喜欢没有InvalidOperationException,这是由在RemoveAt操作后的列表中缺少的元素引起的!