priority_queue指定模板参数

#include<queue>
#include<iostream>


using namespace std;


struct mytype
{
        int x;
};


struct comp
{
        bool operator()(mytype a, mytype b)
        {
                return a.x > b.x;
        }
};


bool operator < (mytype a, mytype b)
{
        return a.x < b.x;
}


int main()
{
        //基本数据类型
        priority_queue<int> pq; //使用默认模板参数(最大堆)
        priority_queue<int,vector<int>,greater<int> > pq1; //最小堆


        //自定义数据类型
        priority_queue<mytype,vector<mytype>,comp> pq2; //指定三个参数
        priority_queue<mytype> pq3;//重载operator<后,声明对象时就可以只带一个模板参数
}

### C++ `priority_queue` 结构体 #### 使用方法 C++ 中的 `priority_queue` 是一种容器适配器,用于实现优先队列。默认情况下,它是一个最大堆(即顶部元素是最大的)。可以使用不同的参数来改变其行为。 创建一个简单的整数类型的优先队列如下所示: ```cpp #include <iostream> #include <queue> using namespace std; int main() { priority_queue<int> pq; pq.push(1); pq.push(3); pq.push(2); while (!pq.empty()) { cout << pq.top() << " "; pq.pop(); } } ``` 这段代码展示了如何向优先队列中添元素并逐个移除它们[^1]。 为了构建最小堆而不是默认的最大堆,可以通过传递第三个模板参数给 `priority_queue` 来指定比较类型为 `std::greater<T>`: ```cpp #include <iostream> #include <queue> using namespace std; int main() { priority_queue<int, vector<int>, greater<int>> minHeap; minHeap.push(1); minHeap.push(3); minHeap.push(2); while (!minHeap.empty()) { cout << minHeap.top() << " "; minHeap.pop(); } } ``` 此示例说明了通过设置第三模板参数为 `greater<int>` 可以让 `priority_queue` 行为像一个小顶堆[^2]. #### 数据结构解释 `priority_queue` 实际上基于其他标准库容器之上工作,默认底层容器是 `vector`. 它支持三个主要操作:插入 (`push`)、删除 (`pop`) 和访问最高优先级项 (`top`). 当提到内部存储机制时,`priority_queue` 维护了一个二叉堆的数据结构。这意味着即使底层数组可能看起来无序,但在逻辑层面总是保持堆性质——父节点的关键字大于等于子节点关键字 (对于最大堆),反之亦然 (对于最小堆)[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值