内置类型就是 C++ 提供的数据类型,⽐如 int 、 double 、 long long 等。以 int 类型为例,分别创建⼤根堆和⼩根堆。
这种写法意思是,我要告诉这个优先级队列要建一个什么样的堆,第一个int是要存什么数据类型,vector<int>这个优先级队列要用什么类型来实现,相当于这个堆是要用vector实现的,less<int>是比较方式,决定了最终实现的是大根堆还是小根堆,less是小于的意思,c++提供的小于的比较方式,比如<>里传的int,就会拿int作比较,是小于的话就返回true,否则返回false,因此我们可以把它理解成小于的比较方式,大于的比较方式是greater,创建大根堆用less<int>,小根堆用greater<int>
//大根堆
priority_queue<int, vector<int>, less<int>> heap2;
//小根堆
priority_queue<int, vector<int>, greater<int>> heap3;
- 记忆方式:
- 大根堆用小于 把小的比下来
- 小根堆用大于 把大的比下来
代码实现
#include <iostream>
#include <queue>
using namespace std;int a[10] = { 1, 41, 23, 10, 11, 2, -1, 99, 14, 0 };//内置类型
void test1()
{//大根堆priority_queue<int> heap1;//大根堆// priority_queue<数据类型, 存储结构, 比较方式>priority_queue<int, vector<int>, less<int>> heap2;//小根堆priority_queue<int, vector<int>, greater<int>> heap3;//记忆方式://大根堆用小于 把小的比下来//小根堆用大于 把大的比下来for (int i = 0; i < 10; ++i){heap2.push(a[i]);heap3.push(a[i]);}cout << "大根堆:";while (heap2.size()){cout << heap2.top() << " ";heap2.pop();}cout << endl;cout << "小根堆:";while (heap3.size()){cout << heap3.top() << " ";heap3.pop();}cout << endl;
}int main()
{test1();return 0;
}