priority_queue的使用 详细总结

参考博文:https://blog.csdn.net/weixin_36888577/article/details/79937886
最近做到一些使用堆排序的题,因此总结一下priority_queue

优先队列也是队列,因此头文件为,与queue的不同在于可以定义数据的优先级,在插入数据时会自动排序。

基本操作
  • top 访问队头元素
  • push 插入元素到队尾并排序
  • pop 弹出队头元素
  • empty
  • size
  • emplace 原地构造一个元素并插入队列
  • swap
定义
priority_queue<type,container,functional>
  • type 元素的数据类型
  • container 必须是用数组实现的容器,比如vector,deque。默认为vector
  • functional 优先级的比较方法。对于内置类型默认为less(大顶堆)
  • 对于内置类型构成的,使用默认比较方式的优先队列,只需要指定type即可
  • 具有所有队列的特性,只是添加了自动排序。实际用来实现
std::string wrds [] {
   "one", "two", "three", "four"};
std::priority_queue<std::string, std::vector<std::string>, std::greater<std::string>> words(std::begin(wrds), std::end(wrds)); 

可以用任何容器的迭代器(开始和结束)来初始化优先队列。这里使用operator>()对元素对象进行比较,从而排序。

std::vector<int> values{
   21, 22, 12, 3, 24, 54, 56};
std::priority_queue<int> numbers(std::less<int>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
priority_queue是C++标准库中的一个容器适配器,它提供了一种基于优先级的元素访问方式。它内部使用数据结构来实现,保证了插入和删除操作的时间复杂度都是O(logN)。 priority_queue使用非常简单,首先需要包含头文件<queue>,然后可以通过以下方式定义一个priority_queue对象: ```cpp #include <queue> std::priority_queue<int> pq; // 默认构造函数,创建一个空的priority_queue,元素类型为int ``` 可以看到,priority_queue可以存储任意类型的元素,只需要在尖括号中指定元素类型即可。 接下来,可以使用以下几个常用的成员函数来操作priority_queue: 1. push(element):将元素element插入到priority_queue中。 2. pop():删除priority_queue中的顶部元素。 3. top():返回priority_queue中的顶部元素,即最大(或最小)值。 4. size():返回priority_queue中元素的个数。 5. empty():判断priority_queue是否为空。 需要注意的是,默认情况下,priority_queue是按照元素的降序进行排列的,即最大值位于顶部。如果需要按照升序排列,可以使用自定义比较函数或者重载元素类型的小于运算符。 以下是一个示例代码,演示了如何使用priority_queue: ```cpp #include <iostream> #include <queue> int main() { std::priority_queue<int> pq; pq.push(10); pq.push(30); pq.push(20); while (!pq.empty()) { std::cout << pq.top() << " "; pq.pop(); } return 0; } ``` 输出结果为:30 20 10,即按照降序排列输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值