欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在C++中快速了解priority_queue的基本用法与结构实现

最编程 2024-07-19 22:22:59
...

优先队列的结构定义是一个模板类,需要提供三个类型参数:

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

从定义可以看出,虽然要结构是三个参数,但是后两个参数带了默认值,所以针对于普通的数据类型,一般情况下指提供第1个参数就可以了,比如 priority_queue<int> 实际上等价于 priority_queue<int, vector<int>, less<int>>

这三个参数的含义分别为:数据类型,容器类型和比较函数,实际上优先队列就是维护了一个装有 T 类型元素的容器 Container,并在入队和出队时对容器内元素使用 Compare 比较函数进行了排序。

这3个参数还要满足一定的要求,并且在使用过程中有些注意事项:

  • 如果类型 TContainer 容器中元素类型不一致,那么行为未定义,所以要避免这种情况。
  • Container 必须是序列容器,其实C++中序列容器很多的,比如std::arraystd::vectorstd::dequestd::list
  • Container 还必须要支持随机访问,并且有 front()push_back()pop_back() 等函数

这样来看只有 std::vectorstd::deque 满足容器条件了,而优先队列中使用的默认参数也是 std::vector

推荐阅读