实现的一个按int类型值从大到小的优先队列,使用大根堆实现。
#include <iostream>
#include <vector>
using namespace std;
class priority_queue
{
private:
vector<int> data;// data[0] is not used
void sift_up(int index)
{
int parent_index = index / 2;
if (parent_index == 0)
{
return;
}
else
{
if (data[index] > data[parent_index])
{
int temp = data[index];
data[index] = data[parent_index];
data[parent_index] = temp;
sift_up(parent_index);
}
}
}
void sift_down(int index)
{
int left_son_index = index * 2;
if (left_son_index >= (int)data.size())
{
return;
}
else
{
// which son to swap with
int swap_index = left_son_index;
if (left_son_index + 1 < (int)data.size() && data[left_son_index] < data[left_son_index] + 1)
{
swap_index = left_son_index + 1;
}
// swap!
if (data[index] &