C++学习笔记--STL标准模板库的认识与使用--容器适配器--优先队列

1、什么是优先队列?

C++ Priority Queues(优先队列)

(1)C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。

2、头文件

#include <queue>

 3、定义

std::priority_queue<TypeName> q;             // 数据类型为 TypeName
std::priority_queue<TypeName, Container> q;  // 使用 Container 作为底层容器
std::priority_queue<TypeName, Container, Compare> q;
// 使用 Container 作为底层容器,使用 Compare 作为比较类型

// 默认使用底层容器 vector
// 比较类型 less<TypeName>(此时为它的 top() 返回为最大值)
// 若希望 top() 返回最小值,可令比较类型为 greater<TypeName>
// 注意:不可跳过 Container 直接传入 Compare

// 从 C++11 开始,如果使用 lambda 函数自定义 Compare
// 则需要将其作为构造函数的参数代入,如:
auto cmp = [](const std::pair<int, int> &l, const std::pair<int, int> &r) {
  return l.second < r.second;
};
std::priority_queue<std::pair<int, int>, std::vector<std::pair<int, int> >,
                    decltype(cmp)>
    pq(cmp);

4、相关操作(函数)

empty() 如果优先队列为空,则返回真
pop() 删除第一个元素
push() 加入一个元素
size() 返回优先队列中拥有的元素的个数
top() 返回优先队列中有最高优先级的元素

5、代码示例

#include<iostream>

#include<queue>

using namespace std;

int main()
{
	priority_queue<int> q;//创建一个普通优先队列

	priority_queue<int, vector<int>> q2;//创建一个基于底层容器vector的优先队列

	priority_queue<int, deque<int>, greater<int>> q3;//使用deque作为底层容器,greater表示内置类型从大到小排序,less表示内置类型从小到大排序。

	for (int i = 1; i <= 5; i++) q.push(i);//q={1,2,3,4,5}

	cout << q.top() << endl;//访问堆顶元素:5

	q.pop();//堆中元素:q={1,2,3,4}

	cout << q.size() << endl;//4

	for (int i = 1; i <= 5; i++) q3.push(i);//q3={1,2,3,4,5}

	cout << q3.top() << endl;//1

	return 0;
}

6、运行结果

猜你喜欢

转载自blog.csdn.net/qq_51701007/article/details/121267662