加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
priority_queue 1.55 KB
一键复制 编辑 原始数据 按行查看 历史
东方寿 提交于 2024-06-02 12:16 . add priority_queue.
#include<vector>
#include<iostream>
#include<assert.h>
using std::vector;
using std::swap;
namespace Mack
{
template<class T>
class less
{
public:
bool operator()(const T& x, const T& y)
{
return x < y;
}
};
template<class T>
class greater
{
public:
bool operator()(const T& x, const T& y)
{
return x > y;
}
};
template<class T, class Sequence = vector<T>,class Compare = greater<T>>
class priority_queue
{
public:
void AdjustUP(size_t child)
{
size_t parent = (child - 1) / 2;
while (child > 0)
{
if (comp(c[child] , c[parent]))
{
swap(c[child], c[parent]);
child = parent;
parent = (child - 1) / 2;
}
else
{
break;
}
}
}
void push(const T& val)
{
c.push_back(val);
AdjustUP(size() - 1);
}
void AdjustDown(size_t parent)
{
size_t child = parent * 2 + 1;
while (child < size())
{
while (child + 1 < size() && comp(c[child + 1] , c[child]))
{
child++;
}
if(comp(c[child] , c[parent]))
{
swap(c[child], c[parent]);
parent = child;
child = parent * 2 + 1;
}
else
{
break;
}
}
}
void pop()
{
assert(size() >0);
swap(c[0], c[size() - 1]);
c.pop_back();
AdjustDown(0);
}
bool empty() const
{
return c.empty();
}
size_t size() const
{
return c.size();
}
const T& top() const
{
return c.front();
}
private:
Sequence c;
Compare comp;
};
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化