C#最优队列PriorityQueue使用比较器

news2025/1/12 20:56:05

对30个对象进行优先选择前4个,这个4个根据该对象的Info属性进行判断,它是自定义类型,所以需要用比较器来比较它的大小。

    public class CustomType
    {
        public int? ID { get; set; }
    }

    public class RecSample
    {
        public int Name { get; set; }
        public int Value { get; set; }
        public CustomType Info { get; set; }

        public RecSample()
        {
            Info = new CustomType();
        }
    }

    public class InfoComparer : IComparer<CustomType>
    {
        public int Compare(CustomType? x, CustomType? y)
        {
            if (x?.ID == null || y?.ID == null) return 0;
            return x.ID.Value.CompareTo(y.ID.Value);
        }
    }

    internal class Program
    {
        private static void Main(string[] args)
        {
            Random r = new Random();
            List<RecSample> list = new List<RecSample>();
            for (int i = 0; i < 30; i++)
            {
                list.Add(new RecSample
                {
                    Name = r.Next(0, 30),
                    Value = r.Next(0, 30),
                    Info = new CustomType { ID = r.Next(0, 30) }
                });
            }

            PriorityQueue<RecSample, CustomType> pq = new PriorityQueue<RecSample, CustomType>(new InfoComparer());
            foreach (var item in list)
            {
                if (pq.Count < 4)  //取前4个值
                    pq.Enqueue(item, item.Info);
                else
                    pq.EnqueueDequeue(item, item.Info);//能用合并的用合并,一定不要入队再出队的两步,浪费效率
            }

            Console.WriteLine("    " + pq.Count);
            while (pq.Count > 0)
                Console.WriteLine(pq.Dequeue().Info.ID);

            list.Sort((x, y) => Nullable.Compare(x.Info?.ID, y.Info.ID));
            foreach (var item in list)
                Console.Write(item.Info.ID.ToString() + ",");

            Console.ReadKey();
        }
    }

结果:

也可以在初始化时指定容量大小:
PriorityQueue<RecSample, CustomType> pq = new PriorityQueue<RecSample, CustomType>(5,new InfoComparer());

考虑到选择4个,指定为5,多一个用于比较,进入临时的入队和出队。

PriorityQueue并不像一般的队列或堆栈一样具有固定的容量限制。当创建一个PriorityQueue对象时,指定的容量参数通常用于内部数组的初始化,但并不限制队列的实际大小。因此,即使指定了容量为5,队列仍然可以动态增长以容纳更多元素。后面连续增加的话,它仍然会自动扩容。

个人觉得还是设置5吧,后面到4时再入队出队,一直保持最大极限5,这样它一直不会突破最初的容量,也就不会产生扩容情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1464302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NLP_构建GPT模型并完成文本生成任务

文章目录 搭建GPT模型&#xff08;解码器&#xff09;构建文本生成任务的数据集训练过程中的自回归文本生成中的自回归&#xff08;贪婪搜索&#xff09;完整代码小结 搭建GPT模型&#xff08;解码器&#xff09; GPT 只使用了 Transformer的解码器部分&#xff0c;其关键组件…

江科大stm32学习笔记——【3-2】GPIO输出:LED闪烁LED流水灯蜂鸣器

&#xff08;一&#xff09; 硬件连接 1.LED闪烁 LED灯正极连接面包板电源正极&#xff0c;LED负极连接单片机A0口 (也可以LED负极连面包板负极&#xff0c;LED正极连接单片机A0口) 跳线连接单片机3.3和面包板正极&#xff0c;连接单片机GND和面包板负极 2.LED流水灯 3.蜂鸣…

DevOps的3大核心基础架构

原文链接&#xff1a;DevOps的3大核心基础架构_软件开发生产线 CodeArts_理论实践_DevOps概览 由于近年DevOps概念的火热&#xff0c;加之DevOps的涵盖面非常广&#xff0c;因此有很多文章和技术都在和DevOps强行关联&#xff0c;使很多想要了解学习DevOps的开发者迷惑不解。 …

Draw.io绘制UML图教程

一、draw.io介绍 1、draw.io简介 draw.io 是一款强大的免费在线图表绘制工具&#xff0c;支持创建流程图、组织结构图、时序图等多种图表类型。它提供丰富的形状库、强大的文本编辑和样式设置功能&#xff0c;使用户能够轻松创建专业级图表。draw.io 具有用户友好的界面&…

Hive【内部表、外部表、临时表、分区表、分桶表】【总结】

目录 Hive的物种表结构特性 一、内部表 建表 使用场景 二、外部表 建表:关键词【EXTERNAL】 场景&#xff1a; 外部表与内部表可互相转换 三、临时表 建表 临时表横向对比​编辑 四、分区表 建表&#xff1a;关键字【PARTITIONED BY】 场景&#xff1a; 五、分桶表 …

ssm+springmvc基于springboot的宠物领养系统的设计与实现_j5fk4

宠物领养系统主要是为了提高管理员的工作效率&#xff0c;满足管理员对更方便、更快、更好地存储所有信息和数据检索功能的要求。通过对多个类似网站的合理分析&#xff0c;确定了宠物领养系统的各个模块。考虑到用户的可操作性&#xff0c;经过深入调查研究&#xff0c;遵循系…

django rest framework 学习笔记-实战商城2

01收货地址模型类和视图定义_哔哩哔哩_bilibili 本博客借鉴至大佬的视频学习笔记 地址信息的管理&#xff1a;增删改查的实现 # 序列化器配置 class AddrSerializer(serializers.ModelSerializer):"""收货地址的模型序列化器"""class Meta:mo…

NXP实战笔记(六):S32K3xx基于RTD-SDK在S32DS上配置PWM发波

目录 1、概述 2、SDK配置 2.1、Port配置 2.2、Emios_Mcl_Ip 2.3、Emios_Pwm 2.4、代码示例 1、概述 针对S32K3xx芯片&#xff0c;产生PWM的硬件支持单元仅有两个&#xff0c;分别是eMiosx与Flexio. 生成PWM的顺序&#xff0c;按照单片机所用资源进行初始化执行如下 初始化…

ELK入门(四)-logstash

Logstash Logstash 是开源的服务器端数据处理管道&#xff0c;能够同时从多个来源采集数据&#xff0c;转换数据&#xff0c;然后将数据发送到您最喜欢的存储库中。 Logstash 能够动态地采集、转换和传输数据&#xff0c;不受格式或复杂度的影响。利用 Grok 从非结构化数据中…

Kotlin基础 7

1.apply函数详解 1.1. DSL /*** 为什么要传入扩展函数(泛型),而不是一个普通的匿名函数* T.()->Unit* 扩展函数里自带了接收者对象的this隐式调用* 为什么是泛型的扩展函数?* 因为是由this 隐式调用 this 类型就是泛型类型&#xff0c; 相当于this的扩展函数&#xff0c;…

短剧小程序开发,重塑视频观看体验的科技革命

随着科技的飞速发展&#xff0c;人们的娱乐方式也在不断变化。短剧小程序作为新兴的数字娱乐形式&#xff0c;以其独特的魅力和巨大的市场潜力&#xff0c;正逐渐成为科技与娱乐结合的代表。本文将探讨短剧小程序的发展背景、优势特点、开发流程以及未来展望。 一、短剧小程序…

MySQL数据库集群技术主从复制 一主一从详细讲解

集群技术 集群概述 MySQL复制技术 集群目的 负载均衡 解决高并发 高可用HA 服务可用性 远程灾备 数据有效性 类型 一主一从 一主双从 双主双从 原理 概念 在主库上把数据更改&#xff08;DDL DML DCL&#xff09;记录到二进制日志&#xff08;Binary Log&#xff09;中…

RISC-V知识总结 —— 指令集

资源1: RISC-V China – RISC-V International 资源2: RISC-V International – RISC-V: The Open Standard RISC Instruction Set Architecture 资源3: RV32I, RV64I Instructions — riscv-isa-pages documentation 1. 指令集架构的类型 在讨论RISC-V或任何处理器架构时&…

Code Release Process

Code Control Process-CSDN博客 代码发布流程&#xff08;Code Release Process&#xff09;

Java毕业设计-基于ssm的校园二手交易管理系统-第67期

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的校园二手交易管理系统&#xff1a;前端jsp、jquery&#xff0c;后端 springmvc、spring、mybatis&#xff0c;集成商品管理、订单管理、销售管理、采购管理、购…

vue.js el-tooltip根据文字长度控制是否提示toolTip

一、需求&#xff1a;如何判断当前文本文字是否超出文本长度&#xff0c;是否需要出现提示toolTip。效果图如下&#xff1a; 二、实现&#xff1a; 1、表格字段鼠标放置el-popover出现 “引用主题” 的具体内容&#xff1b; <!-- 表格字段&#xff1a;引用主题 --> <…

Azuki NFT 概览与数据分析

作者&#xff1a;stellafootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;Azuki NFT Collection Dashboard Azuki NFT 将动漫艺术与实用性相结合&#xff0c;培育了一个充满活力的 Web3 社区。 这个 NFT 项目会在 2024 年崛起吗&#xff1f; …

数字化转型导师坚鹏:政府数字化转型之数字建设、发展与创新

政府数字化转型之数字基础设施建设、发展与创新 课程背景&#xff1a; 数字化背景下&#xff0c;很多政府存在以下问题&#xff1a; 不清楚数字基础设施建设现状&#xff1f; 不清楚数字基础设施发展趋势&#xff1f; 不清楚数字基础设施创新案例&#xff1f; 课程特色…

《优化接口设计的思路》系列:第八篇—分页接口的设计和优化

系列文章导航 第一篇—接口参数的一些弯弯绕绕 第二篇—接口用户上下文的设计与实现 第三篇—留下用户调用接口的痕迹 第四篇—接口的权限控制 第五篇—接口发生异常如何统一处理 第六篇—接口防抖(防重复提交)的一些方式 第七篇—接口限流策略 第八篇—分页接口的设计和优化 …

LeetCode刷题计划----day5

19 力扣链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 文章讲解链接&#xff1a;https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8…