priority_queue与queue与vector

本文深入探讨了C++ STL中的priority_queue, queue和vector三种数据结构的使用方法,包括如何创建升序和降序的priority_queue,以及每种数据结构的主要操作如push, pop, top等的使用细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下仅为本菜鸡的私人理解,如有错误请指出。
priority_queue()
在我看来priority_queue就是能够自己定义排列数序的queue。

//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;

操作:

q.top();//访问队头文件。
q.empty();//用于判断队列是否为空。
q.size();//队列元素个数。
q.push();//插入元素到队尾。//后续个能会根据你定义的排序规则排
列。
q.pop();//弹出队头元素。

queue

queue<int> q;
q.back();//队列中最后一个元素。
q.empty();//判断队列是否为空。
q.front();//队列中第一个元素。
q.pop();//删除队列第一个元素。
q.push();//在队列末尾加入一个元素。
q.size();//返回队列中元素的个数。

vector

vector<int> q;
q.push_back();//在数组的最后添加。
q.pop_back();//去掉数组的最后一个数据。
q.begin();//得到数组的头指针。
q.end();//得到数组的最后一个单元+1的指针。
q.front();//得到数组头的引用。
q.back();//得到数组的最后一个单元的引用。
q.size();得到数据大小。
q.enpty();判断数据是否为空。
### 如何使用 `vector` 作为 `priority_queue` 的底层容器 在 C++ 中,默认情况下,`std::priority_queue` 使用 `std::vector` 作为其底层容器[^2]。这意味着无需显式指定容器类型即可创建基于 `vector` 的优先队列。 #### 创建默认的 `priority_queue` 下面展示了如何声明并初始化一个简单的整数类型的优先队列: ```cpp #include <queue> #include <iostream> int main() { std::priority_queue<int> pq; // 插入一些元素到优先队列中 pq.push(1); pq.push(3); pq.push(2); while (!pq.empty()) { std::cout << "Top element is : " << pq.top() << '\n'; pq.pop(); } return 0; } ``` 这段代码定义了一个最大堆形式的优先队列(即每次取出的是当前最大的元素),因为这是 `priority_queue` 的默认行为。 #### 自定义比较函数自定义容器 如果希望改变这种默认设置或想要更灵活地控制内部存储机制,则可以通过提供额外参数来自定义比较方式以及所使用的标准模板库(STL) 容器。对于继续采用 `vector` 而言,只需传递相应的模板实参给构造函数即可: ```cpp #include <queue> #include <functional> #include <vector> #include <iostream> int main(){ typedef std::pair<int, int> PairType; // 使用 vector 存储 pair 类型的数据,并按照第一个成员构建最小堆 std::priority_queue<PairType, std::vector<PairType>, decltype([](const PairType& l, const PairType& r){ return l.first > r.first;})> min_heap_pq{[](const PairType& l, const PairType& r){return l.first > r.first;}}; min_heap_pq.emplace(1, 'a'); min_heap_pq.emplace(5, 'b'); min_heap_pq.emplace(3, 'c'); while(!min_heap_pq.empty()){ auto top = min_heap_pq.top(); std::cout << "(" << top.first << ", " << static_cast<char>(top.second) << ")" << "\n"; min_heap_pq.pop(); } } ``` 此示例说明了如何通过 lambda 表达式来定制化比较逻辑,从而使得 `priority_queue` 成为了一个小顶堆;同时也指定了 `std::vector<pair<int,int>>` 作为实际储存数据结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值