C++中的元组优先队列及其示例
优先队列
优先队列是一种容器适配器,特别设计为队列中的第一个元素是队列中所有元素中最大的,元素以非增序(因此我们可以看到队列中每个元素都有一个优先级{固定顺序})的方式排列。
与优先队列相关的函数:
- empty(): 此函数返回队列是否为空。
- size(): 此函数返回队列的大小。
- top(): 返回队列中最顶部的元素的引用。
- push(x): 此函数将元素‘ x ’添加到队列的末尾。
元组
一个 元组 是一个可以容纳多个元素的对象。元素可以是不同的数据类型。元组的元素按将要访问的顺序作为参数初始化。
与元组相关的函数:
- get(): get()用于访问元组值并修改它们,它接受索引和元组名称作为参数来访问特定的元组元素。
- make_tuple(): make_tuple()用于为元组分配值。传递的值应按照元组中声明的值的顺序进行。
本文重点介绍如何在C++中使用元组的优先队列。元组优先队列在设计复杂数据结构时非常有用。
语法1:元组的最大堆优先队列:
priority_queue<tuple<data_type1, data_type2, data_type3>> priorityQueue;
语法2:元组的最小堆优先队列:
priority_queue<tuple<data_type1, data_type2, data_type3>,
vector<tuple<data_type1, data_type2, data_type3>>,
greater<tuple<data_type1, data_type2, data_type3>>> priorityQueue;
语法3:自定义元组优先队列(使用比较器):
priority_queue<tuple<data_type1, data_type2, data_type3>,
vector<tuple<data_type1, data_type2, data_type3>>, comparator> priorityQueue;
元组的最大堆优先队列:
默认情况下,优先队列为最大堆。因此,在优先队列中出现一对元组时,比较它们的第一个元素,如果两个元组的第一个元素相等,则比较它们的第二个元素,如果第二个元素也相等,则比较第三个元素。具有较大元素的元组将成为优先队列的顶部元素。
示例1: 下面是实现元组的最大堆优先队列的C++程序。
输出
例2: 以下是演示元组的最大堆优先级队列的工作的C++程序。
输出
元组的最小堆优先队列:
在最小堆优先队列中,对于一对元组,先比较它们的第一个元素,如果两个元组的第一个元素相等,则比较它们的第二个元素,如果第二个元素也相等,则比较第三个元素。 元素较小的元组成为优先队列的顶部元素。
示例1: 下面是实现元组最小堆优先队列工作的C++程序。
输出
示例2: 以下是实现元组最小堆优先级队列的C++程序的工作原理。
输出
自定义的元组优先级队列:
进一步处理 如何使用STL实现Min Heap? 是一个必须先决条件,我们在这里学习如何通过将比较器作为参数传递给优先队列来自定义元组的优先队列。
示例1: 以下是实现定制元组优先级队列的C ++程序。
输出
在上面的程序中,对于一对元组,首先比较元组的第二个元素,如果该值相等,则比较第一个元素,如果两个元组的第一个元素相等,则比较第三个元素。否则,小的元素将成为最上面的元素。
例2: 以下是C++程序,演示元组的自定义优先队列的工作原理。
输出
在上面的程序中,对于一对元组,首先比较元组的第二个元素,如果这个值相等,则比较第一个元素,如果两个元组的第一个元素相等,则比较第三个元素。否则,具有更大元素的元组将成为顶部元素。