priority_queue大小根堆
时间: 2023-10-19 11:26:12 浏览: 119
priority_queue是一个容器适配器,它定义了一个元素有序排列的队列。默认情况下,它使用大根堆来实现,也就是队列头部的元素优先级最高。可以使用成员函数size()来获取priority_queue中存储元素的个数。所以,priority_queue的大小就是它中存储元素的个数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [堆——神奇的优先队列 大根堆小根堆详解,附小根堆C++代码实现与STL相关](https://blog.csdn.net/q2453303961/article/details/123935789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
相关问题
priority_queue大小根堆的特点及堆的定义
priority_queue是C++标准库中的一个容器适配器,它基于堆(heap)数据结构实现。堆是一种特殊的树形数据结构,具有以下特点:
1. 堆是一个完全二叉树:除了最底层,其他层的节点都是满的,最底层的节点从左到右排列。
2. 大根堆(或最大堆):堆中每个节点的值都大于或等于其子节点的值。
3. 小根堆(或最小堆):堆中每个节点的值都小于或等于其子节点的值。
priority_queue默认使用大根堆来实现,即根节点的值最大。它的定义如下:
```cpp
template <class T, class Container = vector<T>,
class Compare = less<typename Container::value_type>>
class priority_queue;
```
其中,T表示存储在priority_queue中的元素类型,Container表示底层容器类型,默认为vector,Compare表示元素之间的比较方式,默认为less,即使用元素类型的小于运算符进行比较。
priority_queue提供了以下主要操作:
1. push(x):将元素x插入到priority_queue中。
2. pop():删除priority_queue中的根节点(即最大值或最小值)。
3. top():返回priority_queue中的根节点的值。
4. size():返回priority_queue中元素的个数。
5. empty():判断priority_queue是否为空。
c++ priority_queue小根堆
在C++中,使用priority_queue实现小根堆排序可以通过指定比较函数为greater<int>来实现。具体代码如下所示:
```cpp
#include <iostream>
#include <queue>
using namespace std;
void min_heap_sort() {
int source_data[10] = {3, 5, 8, 1, 10, 2, 9, 15, 13, 16};
priority_queue<int, vector<int>, greater<int>> q; // 小根堆
for (auto n : source_data) {
q.push(n);
}
while (!q.empty()) {
cout << q.top() << endl;
q.pop();
}
}
```
以上代码中,我们使用了priority_queue<int, vector<int>, greater<int>>来声明了一个小根堆,其中greater<int>是一个比较函数对象,用于指定元素的比较方法。在循环中,我们将源数据逐个插入到小根堆中,并通过q.top()来获取最小的元素,然后通过q.pop()来移除堆顶元素。这样就可以实现小根堆排序。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [C++ 优先队列priority_queue,如何定义大小根堆](https://blog.csdn.net/wenrenfudi/article/details/120181925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文
相关推荐
















