请详细说明c++中优先队列的参数和类型声明方法,以及用于若干个实数使用优先队列排序输出的代码
时间: 2024-10-04 11:04:41 浏览: 28
在C++中,优先队列(`priority_queue`)是一个容器适配器,它实现了堆数据结构,其中元素总是按照一定的比较规则(默认是最小值)存储。以下是创建和使用`priority_queue`的一些关键点:
**参数和类型声明方法:**
- `std::priority_queue`模板接受两个参数:一个是元素类型的别名(通常是一个引用),另一个是用于比较元素的标准库容器适配器类型。例如,如果你想用整数并按升序排列,你可以这样声明:
```cpp
// 使用默认的升序比较(小于)
std::priority_queue<int> pq;
```
- 如果你想自定义比较规则,可以提供一个比较函数或者作为第三个模板参数传递一个`Comparator`对象。例如,如果你想要降序排列,可以提供一个比较函数:
```cpp
struct CompareInts {
bool operator()(int a, int b) { return a > b; }
};
std::priority_queue<int, std::vector<int>, CompareInts> pq;
```
**使用`priority_queue`对实数进行排序输出的代码示例**(这里假设我们有一个`std::vector<double>`数组`numbers`):
```cpp
#include <iostream>
#include <queue>
#include <vector>
// 自定义比较函数,用于降序排列
struct DescendingOrder {
bool operator()(double a, double b) { return a > b; }
};
int main() {
std::vector<double> numbers = {4.0, 2.5, 7.8, 1.1, 5.6};
// 使用降序优先队列
std::priority_queue<double, std::vector<double>, DescendingOrder> pq(numbers.begin(), numbers.end());
// 输出最大值
std::cout << "Max value: ";
while (!pq.empty()) {
std::cout << pq.top() << " ";
pq.pop();
}
阅读全文