算法导论(min-priority-queue 最小优先队列的部分实现)

这篇博客介绍了一个用C++实现的最小优先队列(Priority_queue)类,包含push、pop、Tune等操作。代码展示了如何维护堆的性质并确保插入和删除元素时保持最小值在顶部。
摘要由CSDN通过智能技术生成
#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<unordered_set>
#include<unordered_map>
#include<algorithm>
#include<xfunctional>
using namespace std;

class Priority_queue{
private:
	int h_size;
	vector<int> elem;
public:

	Priority_queue(){
		elem.push_back(-1);//we do not use the elem[0]
		h_size = 0;
	}

	int& operator[](int i){
		return elem[i];
	}

	void Tune(int i){
		int index = i;
		int temp = elem[i];
		int max_temp = elem[i];
		while (2 * i <= h_size){
			if (elem[2 * i] < max_temp){
				max_temp = elem[2*i];
				index = 2 * i;
			}
			if (2 * i + 1 <= h_size){
				if (elem[2 * i + 1] < max_temp){
					max_temp = elem[2 * i+1];
					index = 2 * i + 1;
				}
			}
			if (index == i) break;
			else{
				elem[i] =elem[index] ;
				i=index;
			}
		}
		elem[index]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值