测试环境
系统:ubuntu 22.04.2 LTS 64位
gcc版本:11.3.0
编辑器:vsCode 1.76.2
priority_queue介绍
- 容器适配器。
- 支持在末端插入元素,在首端删除元素。
- 不支持随机访问。
- 先进先出规则(FIFO)
- 可以设置元素的优先级最高优先级的元素排在队头
- 默认基础容器为vector,还可以使用deque作为基础容器,或者支持front()、pop_back()、push_buck()的其他容器。
头文件
#include <queue>
模块类定义
template<typename _Tp, typename _Sequence = vector<_Tp>,
typename _Compare = less<typename _Sequence::value_type> >
class priority_queue{};
_Tp:表示存储的元素数据类型
_Sequence:基础容器,默认为vector。
_Compare:排序方式,可通过函数对象来自定义
对象构造
std::priority_queue<int> priorityque1;
std::priority_queue<int> priorityque2(priorityque1);
std::priority_queue<std::string, std::deque<std::string> > priorityque3;
std::priority_queue<std::string, std::deque<std::string> ,std::greater<std::string> > priorityque4;
std::vector<int> vct1({2,3,1,4,6,5,9,8,7});
std::priority_queue<int> priorityque5(vct1.begin(),vct1.end());
元素访问
函数名 | 返回值 | 功能 |
---|
top() | 首元素的常量引用 | 获取首元素,队列为空时返回值不确定 |
std::cout << priorityqueTest.top() << std::endl;
元素插入和删除
函数 | 返回值 | 功能 |
---|
pop() | 无 | 删除队列头元素 |
push() | 无 | 队列尾插入元素 |
emplace() | 无 | 队列尾插入元素 |
std::priority_queue<int> priorityqueTest;
priorityqueTest.push(88);
priorityqueTest.emplace(8);
priorityqueTest.pop();
容器大小
函数 | 返回值 | 功能 |
---|
empty() | bool | 判断当前容器是否为空,为空返回true,否则返回false |
size() | std::size_t | 获取当前容器中的元素数量 |
std::cout << std::boolalpha << priorityqueTest.empty() << std::endl;
std::cout << priorityqueTest.size() << std::endl;
迭代器
不支持
其他函数
std::priority_queue<int> priorityqueSwap1;
priorityqueSwap1.push(1);
priorityqueSwap1.push(2);
priorityqueSwap1.push(3);
std::priority_queue<int> priorityqueSwap2;
priorityqueSwap2.push(4);
priorityqueSwap2.push(5);
priorityqueSwap2.push(6);
priorityqueSwap1.swap(priorityqueSwap2);
std::swap(priorityqueSwap1,priorityqueSwap2);