你可以手写C++优先队列吗
时间: 2024-10-06 16:04:15 浏览: 34
当然可以,C++标准库中并没有直接提供优先队列(`priority_queue`),但它可以通过容器(如`std::vector`、`std::list` 或者自定义容器)配合适配器(如`std::make_heap`、`std::make_pq`等)来实现。这里是一个简单的示例,展示了如何使用`std::priority_queue`:
```cpp
#include <queue>
#include <iostream>
struct MyPriorityType {
int value;
// 如果需要,还可以添加额外比较规则
bool operator<(const MyPriorityType& other) const {
return value > other.value; // 按值降序排序
}
};
int main() {
std::priority_queue<MyPriorityType> pq;
// 插入元素
pq.push({10});
pq.push({5});
pq.push({15});
// 可以通过迭代器访问元素
while (!pq.empty()) {
std::cout << pq.top().value << " ";
pq.pop();
}
return 0;
}
```
在这个例子中,`MyPriorityType` 定义了一个按照值降序排序的优先队列。`operator<` 的实现确保了元素会被存储在堆中,始终保证队列顶部的是当前最小的元素。
阅读全文