当前位置: 首页 > news >正文

【C++】序列与关联容器(三)map与multimap容器

【C++】序列与关联容器(三)map与multimap容器

  • 一、map
  • 二、multiset / multimap

一、map

  • 树中的每个结点的类型是一个std::pair //pair的类型是<const key,value>
    pair是一个包含两个指针的结构体,第一个指针指向该节点的key,第二个指针指向该节点的value。
  • 键(pair.first) 需要支持使用< 比较大小
  • 或者采用自定义的比较函数来引入大小关系
  • 访问元素:find / [] / at

在这里插入图片描述
map初始化:

map<int, bool> m{ {3,true} ,{ 2,false } ,{5,true} };

打印map中的数据:

  • 使用range_based for方式
for (auto p : m)
{cout << p.first << " " << p.second << endl;
}
  • 使用pair方式
for (auto ptr = m.begin(); ptr != m.end(); ++ptr)
{auto p = *ptr;  //pair的类型是:<const int, bool>cout << pair.first << " " << pair.second << endl;
}
  • 使用绑定函数方式
for (auto  [k,v] : m)//拷贝方法
{cout << k << " " << v << endl;
}
for (auto&  [k,v] : m)//直接使用引用的方法
{cout << k << " " << v << endl;
}

访问map中的数据
注意[]方式的使用:
如果[]中输入的key值在已定义的map中并不存在,系统并不会返回不存在这样的信息,而是会新建一个该key值对应的节点,并把value隐式的初始化为0。
如下:

map<int, bool> m{ {3,true} ,{ 2,false } ,{5,true} };
cout << m[100] << endl;

由于我们并未定义一个key为100的结点,故系统在m中找不到该节点,之后就自行定义了该节点,并把节点的value值初始化为0。故该输出结果为0。
但是其他的访问方式,如:at,find都会输出报错,访问越界。而不会新建。
所以使用[]运算符不可以操作常量对象,如:

const map<int, bool> m{ {3,true} ,{ 2,false } ,{5,true} };
cout << m[100] << endl;

这样就是错的。因为常量对象不可修改,不可写,但是[]运算符在查找不到该节点的时候就会新增一个节点,相当于企图修改该常量对象,那就是错误的。

那对于常量对象如何访问元素呢?答案是使用find或者at。

const map<int, bool> m{ {3,true} ,{ 2,false } ,{5,true} };
auto ptr = m.find(3);
if (ptr != m.end())
{cout << ptr->second << endl;
}

二、multiset / multimap

set,map,multiset,multimap都是基于红黑树实现的,其放入节点后都会自动排序,排序结果是按照键值(key)从小到大的排序。
multiset,multimap相比于set,map多的特性就是允许重复键。
如下代码输出结果是 1 3,但是我们初始化的时候是1 3 1。由此可见set把重复的值进行了合并,只会保留一个。

set<int> m = { 1,3,1 };
for (auto p : m)
{cout << p << endl;
}

但是把set换为multiset之后,打印结果就变为了1 1 3。

multiset<int> m = { 1,3,1 };
for (auto p : m)
{cout << p << endl;
}

元素访问(其余的和set,map类似,下面几个只是针对他可以存储重复结点而多出的相对特殊的特点方法)

  • find 返回首个查找到的元素
  • count 返回元素个数
  • lower_bound / upper_bound / equal_range 返回查找到的区间

相关文章:

【C++】序列与关联容器(三)map与multimap容器

【C】序列与关联容器&#xff08;三&#xff09;map与multimap容器 一、map二、multiset / multimap 一、map 树中的每个结点的类型是一个std::pair //pair的类型是<const key,value> pair是一个包含两个指针的结构体&#xff0c;第一个指针指向该节点的key&#xff0c;…...

ActiveMQ、RabbitMQ、Kafka、RocketMQ在优先级队列、延迟队列、死信队列、重试队列、消费模式、广播模式的区别

ActiveMQ、RabbitMQ、Kafka、RocketMQ这四款消息队列在优先级队列、延迟队列、死信队列、重试队列、消费模式、广播模式等方面各有其特点和差异。以下是对这些方面的详细比较&#xff1a; 1. 优先级队列 ActiveMQ&#xff1a;支持优先级队列&#xff0c;可以在发送消息时指定…...

首款会员制区块链 Geist 介绍

今天&#xff0c;Pixelcraft Studios 很高兴地宣布即将推出 Geist&#xff0c;这是一个由 Base、Arbitrum、Alchemy 以及 Aavegotchi 支持的全新 L3。 Geist 之前的代号为 “Gotchichain”&#xff0c;是首个专为游戏打造的会员专用区块链。 为什么选择 Geist&#xff1f; …...

CANoe软件中Trace窗口的筛选栏标题不显示(空白)的解决方法

文章目录 问题描述原因分析解决方案扩展知识总结问题描述 不知道什么情况,CANoe软件中Trace窗口的筛选栏标题突然不显示了,一片空白。现象如下: 虽然不影响CANoe软件的使用,但是观感上非常难受,对于强迫症患者非常不友好。 原因分析 按照常规思路,尝试了: 1、重启CAN…...

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有&#xff1a; 1.日期类的构造函数 2.日期类的拷贝构造函数&#xff08;在头文件中实现&#xff09; 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…...

【问题记录+总结】VS Code Tex Live 2024 Latex Workshop Springer模板----更新ing

目录 Summary 道阻且长 少即是多 兵马未动粮草先行 没有万能 和一劳永逸 具体问题具体分析 心态 Detail 1、关于模板[官网] 2、settings.json 3、虫和杀虫剂 4、擦 换成Tex Studio都好了。。。 Summary 道阻且长 某中意期刊&#xff0c;只有Latex。之前只简单用过…...

Linux运维_Bash脚本_源码安装Go-1.21.11

Linux运维_Bash脚本_源码安装Go-1.21.11 Bash (Bourne Again Shell) 是一个解释器&#xff0c;负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件&#xff0c;并于 1989 年发布的免费软件&#xff0c;作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…...

ShareSDK Twitter

创建应用 1.登录Twitter控制台并通过认证 2.点击Developer Portal进入Twitter后台 3.点击Sign up for Free Account创建应用 4.配置应用信息 以下为创建过程示例&#xff0c;图中信息仅为示例&#xff0c;创建时请按照真实信息填写&#xff0c;否则无法正常使用。 权限申请…...

word2vec 如何用多个词表示一个句子

word2vec 模型通常用于将单词映射为固定大小的向量。为了使用多个词表示一个句子&#xff0c;我们可以采用以下几种方法&#xff1a; 词袋模型 (Bag of Words, BoW): 将句子中所有词的向量加起来&#xff0c;不考虑词的顺序。这种方法简单&#xff0c;但会丢失词序信息。 计算…...

IDEA中查看接口的所有实现类和具体实现类

1.IDEA中接口的所有实现类查看 1.CTRLH(hierarchy 结构) 我们选中要查看的接口 按住快捷键ctrlh 在界面右侧可以看到该接口的所有可能实现类 2.右击diagrams->show diagram 选中要查看的接口 右击选择diagrams->show diagram 即可以以图表的方式查看接口和所有实现类…...

DLL的导出和调用

动态链接库在C中非常重要&#xff0c;写了一个简单的例子用于DLL的导出和调用。 DLL的生成 头文件 #include<iostream> #include<stdexcept> using namespace std;#define TESTAPI __declspec(dllexport)// 函数定义 extern "C" {TESTAPI int add(in…...

vscode中调试cuda kernel

关于vscode中调试cpp可参考之前的博客&#xff1a;ubuntu vscode 基本设置 和 调试设置_ubuntu vscode 调试-CSDN博客 这篇我们来讲如何调试.cu的kernel&#xff0c;主要参考的是&#xff1a;https://www.zhihu.com/question/431782036/answer/2468791220 1、基本准备不多说&am…...

SQL的连接查询与pandas的对应关系

在SQL和Pandas中&#xff0c;连接查询&#xff08;join&#xff09;是处理数据集之间关系的重要工具。下面是SQL中的各种连接查询类型及其与Pandas中相应操作的对应关系&#xff1a; 1. INNER JOIN SQL: INNER JOIN 返回两个表中具有匹配值的行。 Pandas: merge() 方法的 how…...

【JS】中断和恢复任务序列

前言 封装processTasks函数&#xff0c;实现以下需求 /*** 依次顺序执行一系列任务* 所有任务全部完成后可以得到每个任务的执行结果* 需要返回两个方法&#xff0c;start用于启动任务&#xff0c;pause用于暂停任务* 每个任务具有原子性&#xff0c;即不可中断&#xff0c;只…...

CentOS系统下安装NVIDIA显卡驱动

一、安装显卡驱动 1.安装依赖项 yum -y install gcc pciutils yum -y install gcc yum -y install gcc-c yum -y install make2.查看内核版本 uname -a3.查看显卡版本 lspci | grep -i nvidia4.屏蔽系统自带的nouveau (1)查看nouveau lsmod | grep nouveau (2)打开blackl…...

Linux 与 Windows 服务器操作系统 | 全面对比

在服务器操作系统的领域&#xff0c;Linux 和 Windows 一直是两个备受关注的选择。 首先来看 Windows 操作系统。它由 Microsoft Corporation 开发&#xff0c;在桌面领域占据显著份额&#xff0c;其中 Windows 10 是使用最广泛的版本&#xff0c;广泛应用于个人计算机和企业桌…...

给既有exe程序添加一机一码验证

原文地址&#xff1a;李浩的博客 lihaohello.top 本科期间开发过一款混凝土基本构件设计程序&#xff0c;该程序是一个独立的exe可执行文件&#xff0c;采用VC静态链接MFC库编制而成。近期&#xff0c;需要为该程序添加用户注册验证的功能&#xff0c;从而避免任何用户获取该程…...

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task2:头脑风暴会,巧灵脑筋急转弯(持续更新)

队伍名称&#xff1a;巧灵脑筋急转弯 队伍技术栈&#xff1a;python&#xff0c;LLM&#xff0c;RAG&#xff0c;大模型&#xff0c;nlp&#xff0c;Gradio&#xff0c;Vue&#xff0c;java 队友&#xff1a;知唐&#xff08;队长&#xff09;&#xff0c;我真的敲不动…...

mysql 多个外键

在MySQL中&#xff0c;一个表可以有多个外键约束&#xff0c;它们分别关联到不同的主表。在创建表时&#xff0c;可以在每个外键约束上指定不同的外键名称。以下是一个简单的例子&#xff0c;演示如何在创建表时定义多个外键&#xff1a; CREATE TABLE orders (order_id INT AU…...

解决方案上新了丨趋动科技推出基于银河麒麟操作系统的异构算力池化解决方案

趋动科技携手麒麟软件打造基于银河麒麟操作系统的异构算力池化解决方案&#xff0c;共同探索AI领域新场景。 人工智能技术作为数字经济发展的重要推手&#xff0c;在各行业业务场景中落地需要大量AI算力资源的有效保障。在IT基础设施普遍云化的今天&#xff0c;AI算力一方面需…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...