STL --- 二、容器 (8)priority_queue

目录

1、std::priority_queue的特点

2、std::priority_queue常用api

3、std::priority_queue应用场景

4、std::priority_queue实例


std::priority_queue是一个STL容器,它是一个优先队列,每个元素都有一个权值,优先级高的元素排在队列的前面。

1、std::priority_queue的特点

(1)插入元素时,自动按照优先级排序,优先级高的元素在队列的前面。

(2)删除元素时,自动删除队列中优先级最高的元素。

(3)可以使用自定义的比较函数来定义元素的优先级。

(4)内部实现是基于堆的数据结构,插入和删除元素的时间复杂度为O(logN)。

(5)支持随机访问,但不支持迭代器。

(6)可以用作最小堆或最大堆,根据比较函数的定义。

(7)不能访问队列中间的元素,只能访问队首和队尾的元素。

2、std::priority_queue常用api

1. push():将元素插入到优先队列中,自动按照优先级排序。

2. top():返回优先队列中优先级最高的元素,即队首元素。

3. pop():删除优先队列中优先级最高的元素,即队首元素。

4. size():返回优先队列中元素的个数。

5. empty():判断优先队列是否为空,如果为空返回true,否则返回false。

6. swap():交换两个优先队列的元素。

7. emplace():在优先队列中构造元素。

8. priority_queue():构造函数,创建一个空的优先队列。

9. priority_queue(Compare cmp):构造函数,创建一个空的优先队列,并指定比较函数。

10. priority_queue(const priority_queue& pq):拷贝构造函数,创建一个新的优先队列,与原队列内容相同。

3、std::priority_queue应用场景

(1)任务调度:在多任务系统中,可以使用std::priority_queue来实现任务的优先级调度,将优先级高的任务先执行。

(2)事件处理:在事件驱动的系统中,可以使用std::priority_queue来存储事件,并按照事件的优先级进行处理。

(3)最短路径算法:在图论算法中,可以使用std::priority_queue来实现Dijkstra算法和Prim算法,找出最短路径或最小生成树。

(4)贪心算法:在贪心算法中,可以使用std::priority_queue来存储贪心策略中的选择集合,并按照选择的优先级进行选择。

(5)堆排序:std::priority_queue本身就是一个堆,可以使用它来实现堆排序算法。

4、std::priority_queue实例

#include <iostream>
#include <queue>

int main() {
    std::priority_queue<int> pq;

    pq.push(10);
    pq.push(30);
    pq.push(20);

    std::cout << "Top element: " << pq.top() << std::endl;

    pq.pop();

    std::cout << "Top element after pop: " << pq.top() << std::endl;

    return 0;
}

输出:

Top element: 30
Top element after pop: 20

在这个例子中,我们创建了一个std::priority_queue对象pq,并使用push()函数添加三个整数值。然后,我们使用top()函数获取队列中的最高优先级元素,并使用pop()函数将其删除。最后,我们再次使用top()函数获取队列中的最高优先级元素。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值