std::map使用自定义的数据结构当做key

一、std::map是按照键的顺序进行排序的,因此需要定义结构类型的比较运算符。通常情况下,你可以通过重载结构类型的小于运算符<来定义比较逻辑。

#include <map>class CKey {
public:CKey(int a) { m_a = a; }~CKey() = default;//也可以在外部(二选一)bool operator< (const CKey &k1) const{return this->v() < k1.v();}int v() const { return m_a; }private:int m_a;
};//也可以在外部(二选一)
bool operator< (const CKey &k1, const CKey &k2)
{return k1.v() < k2.v();
}std::map<CKey, int> map;
map.emplace(CKey(1), 1);
map.emplace(CKey(2), 2);

二、如果你无法修改自定义结构类型的定义或不希望修改默认的比较逻辑,你可以使用第三个模板参数来指定自定义的比较函数。比较函数应该接受两个参数,并返回一个布尔值指示它们的相对顺序。

#include <map>class CKey {
public:CKey(int a) { m_a = a; }~CKey() = default;int v() const { return m_a; }private:int m_a;
};//自定义比较
struct color_cmp
{bool operator() (const CKey &k1, const CKey &k2) const{return k1.v() < k2.v();}
};//通过第三个模板参数
std::map<CKey, int, color_cmp> map;
map.emplace(CKey(1), 1);
map.emplace(CKey(2), 2);

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

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

相关文章

【Linux篇】冯 诺依曼计算机结构体系

详解冯 诺伊曼体系 CPU : 运算器 && 控制器输入设备 : 话筒&#xff0c;摄像头&#xff0c;键盘&#xff0c;鼠标&#xff0c;磁盘&#xff0c;网卡等输出设备 : 显卡&#xff0c;声卡&#xff0c;网卡&#xff0c;磁盘&#xff0c;显示器&#xff0c;打印机等存储器 :…

中睿天下Coremail | 2023年Q3企业邮箱安全态势观察报告

10月25日&#xff0c;北京中睿天下信息技术有限公司联合Coremail邮件安全发布《2023年第三季度企业邮箱安全性研究报告》。2023年第三季度企业邮箱安全呈现出何种态势&#xff1f;作为邮箱管理员&#xff0c;我们又该如何做好防护&#xff1f; 以下为精华版阅读&#xff0c;如需…

景联文科技:驾驭数据浪潮,赋能AI产业——全球领先的数据标注解决方案供应商

根据IDC相关数据统计&#xff0c;全球数据量正在经历爆炸式增长&#xff0c;预计将从2016年的16.1ZB猛增至2025年的163ZB&#xff0c;其中大部分是非结构化数据&#xff0c;被直接利用&#xff0c;必须通过数据标注转化为AI可识别的格式&#xff0c;才能最大限度地发挥其应用价…

arcgis--浮点型栅格数据转整型

利用【Spatial Analyst工具】-【数学】-【转为整型】工具&#xff0c;将浮点型数据转为整型。如下&#xff1a; 【转为整型】对话框参数设计如下&#xff1a; 转换结果如下&#xff1a;

C_8练习题

一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。) 编写C语言程序一般需经过的几个步骤依次是()。 A.编辑、调试、编译、连接 B.编辑、编译、连接、运行 C.编译、调试、编辑、连…

阿里云全球故障凸显“云集中”风险

阿里云12日发生的全球性故障再次将“云集中风险”推上风口浪尖。这一公有云史上罕见的事件不仅影响了数以万计的企业和服务&#xff0c;也引发了对云服务集中化趋势的深刻反思。 2023年11月12日17:44(GMT8)开始&#xff0c;阿里云基础设施发生严重故障&#xff0c;导致阿里巴巴…

【多线程 - 07、中断线程 interrupt】

中断线程 Thread类中interrupt()、interrupted()和isInterrupted()方法 interrupt()方法 其作用是中断此线程&#xff08;此线程不一定是当前线程&#xff0c;而是指调用该方法的Thread实例所代表的线程&#xff09;&#xff0c;但实际上只是给线程设置一个中断标志&#xff0c…

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序

详解 KEIL C51 软件的使用建立工程-CSDN博客 2. 设置工程 (1)在图 2-15 的画面中点击 会弹出如图 2-16 的对话框.其中有 10 个选择页.选择“Target” 项,也就是图 2-16 的画面. 图 2-16 在图 2-16 中,箭头所指的是晶振的频率值,默认是所选单片机最高的可用频率值.该设置值与单…

uniapp运行到安卓模拟器一直在“同步手机端程序文件完成“界面解决办法

如果你是用的模拟器是android studio创建的模拟器&#xff0c;那么你需要新创建一个android11 x86架构的模拟器&#xff1a; 创建完成后&#xff0c;启动模拟器&#xff1a; 然后在hbuilder中重新运行到这个模拟器就可以了&#xff1a; 运行结果&#xff1a; 如果你是用安…

代码随想录Day45 动态规划13 LeetCode T1143最长公共子序列 T1135 不相交的线 T53最大子数组和

LeetCode T1143 最长公共子序列 题目链接:1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 题目思路: 动规五部曲分析 1.确定dp数组的含义 这里dp数组的含义是结尾分别为i-1,j-1的text1和text2的最长公共子序列长度 至于为什么是i-1,j-1我之前已经说过了,这里再…

网络运维Day16

文章目录 Docker简介什么是容器命名空间&#xff1a; Docker 的优缺点 Docker安装Docker镜像管理什么是镜像镜像管理 Docker容器管理运行容器容器启动、停止、重启拷贝文件进入容器容器与应用 DockerfileDockerfile 语法案例 总结 Docker简介 什么是容器 容器是用来装东西的&a…

CSS特效010:文字颜色渐变的流光效果

查看专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花边是描述了一些CSS相关的库、…

爱上C语言:整型和浮点型在内存中的存储(进制转换,原码,反码,补码以及大小端)

&#x1f680; 作者&#xff1a;阿辉不一般 &#x1f680; 你说呢&#xff1a;生活本来沉闷&#xff0c;但跑起来就有风 &#x1f680; 专栏&#xff1a;爱上C语言 &#x1f680;作图工具&#xff1a;draw.io(免费开源的作图网站) 如果觉得文章对你有帮助的话&#xff0c;还请…

揭秘Vue中的nextTick:异步更新队列背后的技术原理大揭秘!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、N…

go-bindata - embed结合嵌入静态文件打包可执行二进制文件

## embed 嵌入静态文件到可执行二进制文件 # 安装go-bindata go get -u github.com/jteeuwen/go-bindata/... # 打包静态文件 go-bindata web/... 执行次命令之后会在项目目录下生成bindata.go文件,示例命令中模板文件都在项目的web目录下 # 使用embed注册模板示例文档 http…

Git 修改历史 commit message

一. 修改最新的 commit log 修改最近一次commit message&#xff0c; 直接使用命令 git commit --amend 就可以完成修改二. 修改历史 commit log 查看日志(按 q 退出) git log --oneline # 查看5步的log。 git log --oneline -5选择要修改的commit 信息 # 要修改的 commit log…

邦芒攻略:新手求职面试需要准备的材料

新手求职面试需要准备的材料&#xff0c;求职材料是求职者写给用人单位的信&#xff0c;目的是让对方了解自己&#xff0c;准备好充足的资料和自信的心态会让面试通过的几率大大增强&#xff0c;那么应聘者需要准备的材料呢&#xff0c;来看看吧。 ​ ​1、求职信。也是求职者…

数据湖架构

数据湖架构介绍 数据湖&#xff08;Data Lake&#xff09;是一个存储大量结构化和非结构化数据的集中式数据存储库。 与传统的数据仓库不同&#xff0c;数据湖采用扁平化结构&#xff0c;将数据存储在原始形式下&#xff0c;不需要进行预处理或转化。这使得数据湖能够同时支持…

微服务的注册发现和微服务架构下的负载均衡

文章目录 微服务注册模型服务注册与发现怎么保证高可用【1. 服务端崩溃检测】【2. 客户端容错】【3. 注册中心选型】 微服务架构下的负载均衡【1.轮询与加权轮询】【2.随机与加权随机】【3.哈希与一致性哈希】【4.最少连接数】【5.最少活跃数】【6.最快响应时间】【总结】 负载…