首页 > 其他分享 >优先队列模板

优先队列模板

时间:2024-09-03 09:36:50浏览次数:10  
标签:PII 优先 队列 heap1 second heap push 模板 first

基础用法

int main() {
	/*
		c++优先队列默认为大根堆
	*/
	priority_queue<int, vector<int>> heap;
	heap.push(1);
	heap.push(2);
	heap.push(3);

	while(heap.size()){
		cout<<heap.top()<<' ';
		heap.pop();
	}
	/*output: 3 2 1*/


	/*
		优先队列设置为小根堆
	*/
	priority_queue<int, vector<int>, greater<int>> heap1;
	heap1.push(1);
	heap1.push(2);
	heap1.push(3);

	while(heap1.size()){
		cout<<heap1.top()<<' ';
		heap1.pop();
	}
	/*output: 1 2 3*/

	

	return 0;
	
}

利用仿函数自定义优先级比较

struct comparsion{
	bool operator () (PII A, PII B){
		if(A.first==B.first) return A.second>B.second;
		return A.first<B.first;
	}
};

int main(){
	/*
		自定义优先级进行比较
		typedef pair<int,int> PII;
		按照first从小到大排序,first相等时,按照second从大到小排序
	*/

	priority_queue<PII, vector<PII>, comparsion> heap;

	heap.push({2,3});
	heap.push({1,4});
	heap.push({2,1});
	heap.push({1,10});

	while(heap.size()){
		auto t= heap.top();
		heap.pop();
		cout<<t.first<<' '<<t.second<<endl;
	}
	/*
        与我们需要的刚好相反
		2 1
		2 3
		1 4
		1 10
	*/

	return 0;
}

修改自定义比较符号

struct comparsion{
	bool operator () (PII A, PII B){
		if(A.first==B.first) return -A.second>-B.second;
		return -A.first<-B.first;
	}
};

int main(){
	/*
		自定义优先级进行比较
		typedef pair<int,int> PII;
		按照first从小到大排序,first相等时,按照second从大到小排序
	*/

	priority_queue<PII, vector<PII>, comparsion> heap;

	heap.push({2,3});
	heap.push({1,4});
	heap.push({2,1});
	heap.push({1,10});

	while(heap.size()){
		auto t= heap.top();
		heap.pop();
		cout<<t.first<<' '<<t.second<<endl;
	}
	/*
		2 1
		2 3
		1 4
		1 10
	*/

	return 0;
}

标签:PII,优先,队列,heap1,second,heap,push,模板,first
From: https://www.cnblogs.com/Biang-blog/p/18393945

相关文章

  • keycloak~scope客户端模板的使用
    scope为何物?scope在oauth2中表示授权的范围,另外也可以理解为,根据认证时scope的参数,在构建jwt时,返回更多的信息;比如在keycloak中,你的可选scope(optionalscope)中添加了address这个模板,当你通过/auth/realms/{realmId}/protocol/openid-connect/token进行认证时,你的参数scope中出......
  • Spring中基于redis stream 的消息队列实现方法
       本文主要介绍了消息队列的概念性质和应用场景,介绍了kafka、rabbitMq常用消息队列中间件的应用模型及消息队列的实现方式,并实战了在Spring中基于redisstream的消息队列实现方法。一、消息队列   消息队列是一种进程间通信或者同一个进程中不同线程间的通信方......
  • [数据结构] 循环队列
    front:头指针rear:尾指针maxsize:数组长度循环队列通常会让留空数组中的一位,区分队列为空和队列为满的状态。入队移动rear,出队移动front。形式1(默认):front指向队头元素的前一位,而rear指向队尾元素。队列为空:front==rear队列为满:front==(rear+1)%maxsize元素个数:(r......
  • IO进程day07(信号灯集、消息队列)
    【1】信号灯集semaphore1》概念信号灯(semaphore),也叫信号量,信号灯集是一个信号灯的集合。它是不同进程间或一个给定进程内部不同线程间同步的机制;而Posix信号灯指的是单个计数信号灯:无名信号灯、有名信号灯。(咱们学的是无名信号灯)SystemV的信号灯是一个或者多个信号......
  • 2024.9.2 Python,用栈写每日温度,等差数列划分,子串所有可能性,等差数列划分,深度优先搜索
    1.每日温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,......
  • aws vmware ova模板进系统设置
    Amazonlinux2023下载地址:https://cdn.amazonlinux.com/al2023/os-images/2023.5.20240819.0/vmware/官方参考:https://docs.aws.amazon.com/linux/al2023/ug/seed-iso.html在一台linux上设置一个ssh信任ssh-keygen-trsa得到id_rsaid_rsa.pubcd/root/&&mkdirs......
  • 算法练习题09:滑动窗口最大值(队列、双端队列)
    classSolution{publicint[]maxSlidingWindow(int[]nums,intk){if(nums==null||nums.length==0){returnnewint[0];}intn=nums.length;int[]result=newint[n-k+1];Deque<Integer&......
  • 线性表之队列API设计思路
    Java学习手册+面试指南:https://javaxiaobear.cn队列是一种基于先进先出(FIFO)的数据结构,是一种只能在一端进行插入,在另一端进行删除操作的特殊线性表,它按照先进先出的原则存储数据,先进入的数据,在读取数据时先读被读出来。1、队列的API设计类名Queue构造方法Queue():创建Queue对象成......
  • Java 最小优先队列API设计与实现
    Java学习+面试指南:https://javaxiaobear.cn最小的元素放在数组的索引1处。每个结点的数据总是小于等于它的两个子结点的数据。1、API设计类名MinPriorityQueue构造方法MinPriorityQueue(intcapacity):创建容量为capacity的MinPriorityQueue对象成员方法privatebooleanless(inti......
  • Java最大优先队列设计与实现
    Java学习+面试指南:https://javaxiaobear.cn1、API设计类名MaxPriorityQueue构造方法MaxPriorityQueue(intcapacity):创建容量为capacity的MaxPriorityQueue对象成员方法privatebooleanless(inti,intj):判断堆中索引i处的元素是否小于索引j处的元素privatevoideach(inti,int......