#ifndef TG_SMALL_QUEUE_H
#define TG_SMALL_QUEUE_H
#include<vector>
#include<memory>
template<typename PriorityType, typename ValueType>
/// 最小优先队列
class tg_small_queue
{
struct node
{
ValueType data;
PriorityType level;
node(PriorityType& level, ValueType& data):data(data),level(level)
{
}
};
private:
std::vector<std::shared_ptr<node>> _arr;
public:
tg_small_queue()
{
_arr.reserve(1024);
}
void enqueue(PriorityType& level, ValueType& data)
{
_arr.emplace_back(std::make_shared<node>(level, data));
up_adjust(_arr);
}
bool dequeue(ValueType& out_data)
{
if (_arr.size() == 0)
{
return false;
}
//出队列操作,弹出数据头元素
out_data = _arr[0]->data;
//用尾元素填充头元素
_arr[0] = _arr[_arr.size() - 1];
//删除尾节点
用小顶堆实现的最小优先队列C++
最新推荐文章于 2024-06-29 17:05:47 发布