Standard Template Library基础知识之STL容器适配器
priority_queue(优先级队列)
priority_queue 容器适配器中元素的存和取,遵循的并不是 “First in,First out”(先入先出)原则,而是“First in,Largest out”原则。直白的翻译,指的就是先进队列的元素并不一定先出队列,而是优先级最大的元素最先出队列。每个priority_queue 容器适配器在创建时,都制定了一种排序规则。根据此规则,该容器适配器中存储的元素就有了优先级高低之分。
🔥该容器擅长创建最大堆、最小堆等这种对元素出列的优先级有要求的🔥
包含在#include<queue>
priority_queue<typename T,typename Container,typename Compare>
//有三个参数
//1.typename T:指定存储元素的具体类型;
//2.typename Container:指定 priority_queue 底层使用的基础容器,默认使用 vector 容器。
//3.typename Compare:指定容器中评定元素优先级所遵循的排序规则,默认使用std::less<T>按照元素值从大到小进行排序,还可以使用std::greater<T>按照元素值从小到大排序,但更多情况下是使用自定义的排序规则。
注:作为 priority_queue 容器适配器的底层容器,其必须包含 empty()、size()、front()、push_back()、pop_back() 这几个成员函数,STL 序列式容器中只有 vector 和 deque 容器符合条件。
1. priority_queue初始化
#include <iostream>
#include<queue>
#include<array>
#include<vector>
using namespace std;
int main()
{
//1. 下面是几种初始化方法
//1. 创建一个空的priority_queue 容器适配器
priority_queue<int> values1;
//2.可以使用普通数组或其它容器中指定范围内的数据,
//对priority_queue 容器适配器进行初始化:元素类型要匹配
//使用普通数组
int values2[]{ 4,1,3,2 };
priority_queue<int> copy_values1(values2, values2 + 4);//{4,2,3,1}
//使用序列式容器
array<int, 4> values3{ 4,1,3,2 };
priority_queue<int> copy_values2(values3.begin(), values3.end());//{4,2,3,1}
//3.还可以手动指定 priority_queue 使用的底层容器以及排序规则
priority_queue<int, vector<int>, greater<int>> nums;
}
2. priority_queue成员函数
#include <iostream>
#include<queue>
#include<array>
#include<vector>
using namespace std;
int main()
{
priority_queue<int> values1;
for (int i = 1; i <= 10; ++i) {
values1.push(i);//将元素放入
}
while (!values1.empty()) {
cout << values1.top()<<" ";//输出优先级最高的队头元素
values1.pop();//移除队头元素,以便选一个输出
}
}