C++中集合的优先队列与示例
优先队列
优先队列是一种容器适配器,其特别设计是使队列中的第一个元素是队列中所有元素中最大的元素,并且元素按非增序排列(因此我们可以看到队列的每个元素都有一个优先级(固定顺序))。
与优先队列一起使用的函数:
- empty(): 返回队列是否为空。
- size(): 返回队列的大小。
- top(): 返回队列中最顶部元素的引用。
- pop(): 删除队列中的第一个元素。
集合
集合是一种关联式容器,其中每个元素必须是唯一的,因为该元素的值标识它。元素的值添加到集合后无法修改,尽管可以删除并添加该元素的已修改值。
与集合一起使用的函数:
- size(): 返回集合中的元素数。
- insert(const x): 将新元素“x”添加到集合中。
集合的优先队列对于设计复杂的数据结构非常有用。
语法:
priority_queue<set<data_type>> priorityQueue
这将集合存储为最大堆优先队列中的一个元素
下面是集合的最大堆优先队列的实现:
输出
默认情况下,优先队列是最大堆,因此对于优先队列中的两个集合,具有更大的第一个元素的集合是顶部元素。如果第一个元素相等,则比较集合的第二个值,依此类推。
语法:
priority_queue<set<data_type>, vector<set<data_type>>, greater<set<data_type>>> priorityQueue
这个将set作为一个元素存储在最小堆priority队列中。
下面是实现set最小堆优先级队列的代码:
输出结果
在最小堆优先级队列中,两个集合的内部,如果第一个元素较小,则顶部元素是该集合。如果第一个元素相等,则将进行第二个集合的比较,以此类推。