在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()方法应该移除并返回优先级最高的对象,并且在具有相同优先级的其他元素之前。
好了,所以我能够修改上面的代码以适应我的脱队列操作!
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操作后的列表中缺少的元素引起的!