优先级队列是一种抽象数据类型,用于存储优先级元素的集合,这些元素支持根据元素的优先级插入和删除元素,也就是说,可以随时删除具有第一优先级的元素。优先级队列不按照元素在堆栈,队列,列表等中的位置以线性方式存储元素。优先级队列ADT(抽象数据类型)根据元素的优先级存储元素。
优先级队列支持以下功能-
Size() -用于计算优先级队列的大小,因为它返回了其中的元素数。
Empty() -如果优先级队列为空,则返回true,否则返回false
Insert(element)-用于将新元素插入优先级队列
Min() -如果Priority Queue为空,它将返回关联键值最小的元素,并显示错误消息。
removeMin() -删除min()
函数引用的元素。
任务是在C ++中实现按优先级排序的对优先级队列的概念。
我们可以以类似的方式解决问题,有两种方法可以解决问题
最大优先级或最大堆
最小优先级或最小堆
堆是树结构,其中节点以特定顺序排列。堆有两种类型:最小堆和最大堆。在最小堆中,根节点或父节点小于其子节点,而在最大堆中,根节点或父节点大于其子节点。
Input: priorityq.push(make_pair(18, 200)) Input: priorityq.push(make_pair(18, 200)) priorityq.push(make_pair(29, 100)) priorityq.push(make_pair(11, 400)) Output: 29 100 Input: priorityq.push(make_pair(10, 200)) priorityq.push(make_pair(20, 100)) priorityq.push(make_pair(19, 400)) Output: 20 100 Through Max priority (Max heap)
Start Step 1-> In main function() Define priority_queue<pair<int, int> > priorityq Call priorityq.push(make_pair(18, 200)) Call priorityq.push(make_pair(29, 100)) Call priorityq.push(make_pair(11, 400)) Set pair<int, int> top = priorityq.top() Print top.first and top.second Stop
#include <bits/stdc++.h> using namespace std; //主程序 int main() { priority_queue<pair<int, int> > priorityq; priorityq.push(make_pair(18, 200)); priorityq.push(make_pair(29, 100)); priorityq.push(make_pair(11, 400)); pair<int, int> top = priorityq.top(); cout << top.first << " " << top.second; return 0; }
输出结果
29 100
Start Step 1-> In main function() Define priority_queue<pair<int, int> > priorityq Call pq.push(make_pair(10, 200)) Call pq.push(make_pair(20, 100)) Call pq.push(make_pair(15, 400)) Set pair<int, int> top = pq.top() Print top.first and top.second Stop
#include <bits/stdc++.h> using namespace std; typedef pair<int, int> pi; //主程序 int main() { priority_queue<pi, vector<pi>, greater<pi> > pq; pq.push(make_pair(10, 200)); pq.push(make_pair(20, 100)); pq.push(make_pair(15, 400)); pair<int, int> top = pq.top(); cout << top.first << " " << top.second; return 0; }
输出结果
10 200