最优队列有多种叫法,什么小根堆,大根堆,小顶堆,大顶堆。
队列分多种,线性队列(简单队列),循环队列,最优队列等等。
最优队列,可以看作堆叠箱子,越小的越在上面,或者最大的越在上面。目的就是求出前面最值。比如最大的前3个,或最小的前3个。
framework中只能自己创建类,或者变通由sortedset等来做,现在.net6及以后有了。
下面由.net8(反正它也长期被支持了,就用它吧)。
PriorityQueue定义时要指明两个,前者是元素(对象),后者是优先级,一般是整型,如果是自定义类型,需要对这个优先级自己再定义一个比较器,以便最优队列根据这个比较得知哪个“最优”(最大或最小)。
下面创建多个结构体变量,用大量的数来入队,选取前4个(根据结构体的成员value)。
由于选4个前4个最大值,因此我们设置5为最大容量。满4后就要开始考虑出队问题。
第一种: 满4后,是先判断顶点后入队,还是直接入队出队,这两者哪个效率更优?简单测试一下:
public struct RecSample
{
public int Name { get; set; }
public int Value { get; set; }
}
//public class RecCompare : IComparer<RecSample>