Hippogriff's Blog
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)

Absm

什么也不会
首页
C++
  • 算法
  • 数据结构
  • Leetcode
  • 操作系统
  • 计算机网络
  • MySQL
  • 深度学习
  • 网络
收藏
  • 醍醐灌顶
  • 句读
个人书单 (opens new window)
GitHub (opens new window)
  • 【C++&Leetcode】自定义排序的方法与辨析
  • 关于优先队列priority_queue
    • 关于“容器适配器(container adaptors)”
    • C++ STL中的priority_queue
      • 定义
  • 关于C++ STL size的坑
  • C++ 智能指针
  • C++ const
  • C++&STL中String常见函数用法
  • C++11的decltype
  • C++11右值引用【来自IBM文档】
  • C++11中循环auto的引用
  • C++中的lambda表达式
  • C风格字符串库函数总结
  • C与C++风格的字符串辨析
  • CMake基础命令
  • C++
Absm
2021-03-14
目录

关于优先队列priority_queue

# 关于“容器适配器(container adaptors)”

在C++ primer中关于容器适配器的定义是:

适配器是标准库中的一个通用概念。容器,迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像一种不同的类型。

在C++ STL中有三个顺序容器适配器:stack, queue和priority_queue。这三种数据结构并不是容器,而是对容器的一种行为限制,让它能够以例如push或者pop这种操作改变所存储的内容。

# C++ STL中的priority_queue

# 定义

定义代码如下:

template <class T, class Container = vector<T>,
  class Compare = less<typename Container::value_type> > class priority_queue;
1
2

可以看出默认情况下,Container是一个vector,也就是如果使用的是vector,的话,可以忽略后面Container的参数,只传class就可以了。

然后Compare默认使用的是less(STL所有的有序容器都默认用的是"<",也就是less)。因此默认情况下建立出来的是一个大顶堆:priority_queue.top()取出来的是最大值。

这里大顶堆的理解是,比如vector按less排序会是下面这样:

1 < 2 < 3 < 4

这样1是在入队的地方,而4是在出队的地方,也就是top()。

如果想创建一个小顶堆,就要用functional中的greater()去构建,如下:

priority_queue pq(int, greater<int>());
1
编辑 (opens new window)
上次更新: 2021/06/03, 13:03:33
【C++&Leetcode】自定义排序的方法与辨析
关于C++ STL size的坑

← 【C++&Leetcode】自定义排序的方法与辨析 关于C++ STL size的坑→

最近更新
01
少年游·长安古道马迟迟
11-30
02
CMake基础命令
11-08
03
由浅入深剖析OAuth2.0的授权码模式
07-07
更多文章>
Theme by Vdoing | Copyright © 2019-2023 Murray Li | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×