STL容器适配器

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();//移除队头元素,以便选一个输出
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撑一把纸伞.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值