用c++语言写一个自己的双堆队列的类
时间: 2024-09-25 14:16:34 浏览: 36
在C++中,我们可以创建一个双堆队列(通常称为优先队列,因为元素会被按照一定的顺序存储,通常是较小元素先出队)的数据结构。这里是一个简单的示例,我们将使用大顶堆作为底层数据结构:
```cpp
#include <vector>
#include <queue>
template <typename T>
class MyDoubleHeapQueue {
public:
// 构造函数
MyDoubleHeapQueue() : max_heap_(), min_heap_() {}
// 插入元素到最小堆
void push_min(const T& val) {
std::push_heap(min_heap_.begin(), min_heap_.end(), compare(val));
size_++;
}
// 从最小堆删除并返回顶部元素
T pop_min() {
if (size_ == 0) return T();
T top = min_heap_[0];
std::pop_heap(min_heap_.begin(), min_heap_.end(), compare);
min_heap_.pop_back();
size_--;
return top;
}
// 插入元素到最大堆
void push_max(const T& val) {
std::push_heap(max_heap_.rbegin(), max_heap_.rend(), compare);
size_++;
}
// 从最大堆删除并返回顶部元素
T pop_max() {
if (size_ == 0) return T();
T top = max_heap_[0];
std::pop_heap(max_heap_.rbegin(), max_heap_.rend(), compare);
max_heap_.pop_back();
size_--;
return top;
}
private:
std::vector<T> min_heap_;
std::priority_queue<T, std::vector<T>, decltype(compare)> max_heap_;
// 比较函数,用于调整堆
static bool compare(const T& a, const T& b) { return a > b; }
int size_{};
};
// 示例用法
int main() {
MyDoubleHeapQueue<int> q;
q.push_min(5); q.push_min(1); q.push_max(10);
std::cout << "Popped Min: " << q.pop_min() << std::endl;
std::cout << "Popped Max: " << q.pop_max() << std::endl;
return 0;
}
```
阅读全文