C++容器——map和pair对组
pair(对组)
是一种模板类,允许将两个不同类型的值组合在一起。它由两个数据成员first和second组成,分别用来保存这两个值。
头文件
加头文件
#include<utility>
对于 C++11 及以上标准,pair 类型可以在不包含头文件 <utility> 的情况下直接使用,因为它已经被放入了 std 命名空间。
初始化
std::pair<int,int>f{1,2};
std::pair<int, int>ff = std::make_pair(3,4);
std::pair<int, int>fff={ 1,2 };
使用
#include<iostream>
int main()
{std::pair<int,int>f{1,2};std::cout << f.first << std::endl;std::cout << f.second<< std::endl;return 0;
}//输出结果是
1
2
map容器
是 C++ 标准库中的一种关联容器,它提供了一种键-值(key-value)映射的数据结构。
在map中,每个键对应一个值,键和值之间是一种映射关系。(就像是函数关系一样)
特点:
动态调整大小,自动排序本质是二叉树结构
map容器的使用流程
- 使用需要加入头文件<map>
- map容器的定义及初始化
- map容器的使用
需要加入头文件
#include<map>
map容器的定义及初始化
std::map<int, int>first { { 1,1 }, { 2,2 }};
std::map<int, int>second={ { 1,1 }, { 2,2 } };
std::map<int, int>third(second);
map容器的使用
添加元素
在map容器中每一个键值都是唯一的,如果插入相同的键那原容器的键所对应的值可能会被覆盖
使用[]添加原容器有的键会覆盖容器内的值
#include<iostream>
#include<map>
int main()
{std::map<int, int>first { { 1,4 }, { 2,7 }};first[1] = 33;std::cout << first[1];return 0;
}//输出结果是
33
要向 map 容器中添加元素可以使用 insert 方法或者 emplace 方法
(使用这两种方法不会覆盖容器内的值)
#include<iostream>
#include<map>
int main()
{std::map<int, int>first { { 1,4 }, { 2,7 }};first.emplace (std::make_pair(1, 2));first.insert(std::make_pair(1, 2));std::cout << first[1];return 0;
}//输出结果是
4
删除元素
使用erase(a)删除a元素(a为元素)
使用erase(a)删除指定位置a的元素(a为迭代器)
使用erase(a,b)删除指定范围的元素(a与b为迭代器)
使用clear()删除所有元素
访问元素
通过访问键来访问值
有[]或者使用.at()来访问
#include<iostream>
#include<map>
int main()
{std::map<int, int>first { { 1,4 }, { 2,7 }};std::cout<<first.at(2);std::cout << first[1];return 0;
}//输出结果是
74
查找和统计元素
find(k);查找k是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(k);统计k的元素个数
#include<iostream>
#include<map>
int main()
{std::map<int, int>first { { 1,4 }, { 2,7 }};int it = first.count(1);std::cout << it;return 0;
}
注:map容器查找是找键值
容器操作
empty():
此函数用于判断容器是否为空。如果容器为空,则返回true,否则返回false。
size():
此函数返回容器中实际元素的数量,也就是容器的大小
改变排序顺序
使用仿函数
#include <iostream>
#include <string>
#include <map>
// 自定义比较函数对象,按照字符串长度排序
class Compare
{
public:bool operator()(const std::string& str1, const std::string& str2) const {return str1.length() < str2.length(); // 按照字符串长度升序排序}
};
int main()
{// 使用自定义比较函数对象来实现按照字符串长度排序std::map<std::string, int, Compare> myMap = {{"one", 1},{"three", 3},{"two", 2}};return 0;
}
multimap容器
如果map容器有重复的值要录入那就需要使用multimap容器,其他用法和map容器一致
相关文章:
C++容器——map和pair对组
pair(对组) 是一种模板类,允许将两个不同类型的值组合在一起。它由两个数据成员first和second组成,分别用来保存这两个值。 头文件 加头文件 #include<utility> 对于 C11 及以上标准,pair 类型可以在不包含头…...
MVC和DDD的贫血和充血模型对比
文章目录 架构区别MVC三层架构DDD四层架构 贫血模型代码示例 充血模型代码示例 架构区别 MVC三层架构 MVC三层架构是软件工程中的一种设计模式,它将软件系统分为 模型(Model)、视图(View)和控制器(Contro…...
如何利用AI提高内容生产效率?
如何利用AI提高内容生产效率? 简介:探讨如何通过AI技术提升内容生产的效率和质量。 方向一:自动化内容生成 自动化内容生成是一种利用人工智能技术来自动创建文本、图像、音频等内容的方法。 以下是一些常见的自动化内容生成方式: 基于…...
C++ stack、queue以及deque
1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口: 栈:top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列:top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…...
科沃斯,「扫地茅」荣光恐难再现
作者 | 辰纹 来源 | 洞见新研社 科沃斯恐怕已经很难再回到被市场誉为“扫地茅”时的荣光了。 不久前,科沃斯发布2023年财报,报告期内营业收入155亿,同比仅增长1.16%,归母净利润6.12亿元,同比下降63.96%,直…...
双向BFS算法学习
双向BFS算法学习 推荐练习题 力扣“127”题:单词接龙 “752”题:打开轮盘锁 这里推荐一篇力扣题解 双向BFS 这里使用打开轮盘锁的题干进行举例: 你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’,…...
C++从入门到精通---模版
文章目录 泛型编程函数模版模版参数的匹配原则类模版类模版的定义格式类模版的实例化 总结 泛型编程 泛型编程是一种编程范式,旨在实现通用性和灵活性。它允许在编写代码时使用参数化类型,而不是具体的类型,从而使代码更加灵活和可重用。 在…...
Unity数据持久化之Json
Json概述 Json是什么? 全称:JavaScript对象简谱(JavaScript Object Notation) Json是国际通用的一种轻量级的数据交换格式 主要在网络通讯中用于传输数据,或本地数据存储和读取 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 我们一般使用Json文件来…...
LeetCode 35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入…...
速来get!多微信聚合聊天功能大揭秘!
随着网络时代的发展,微信成为了职场中不可或缺的沟通工具,很多人都有着多个微信号,而要想高效管理这些账号,那就少不了工具的帮忙。 通过微信管理系统,可以轻松实现多个微信号聚合聊天,提高沟通效率。 1、…...
【跟我学RISC-V】(一)认识RISC-V指令集并搭建实验环境
目录 写在前面 一、RISC-V指令集简介 1、什么是ISA 2、有哪些ISA 3、CISC和RISC 4、什么是RISC-V 1. RISC 的起源 2. RISC-I 和 RISC-II 3. RISC 发展和商业化 4. RISC-V 的诞生 5、RISC-V生态的特点 6、RISC-V指令集的特点 1. 开源 2. 社区化 3. 设计简洁 4. 模…...
如何使用google.protobuf.Struct?
google.golang.org/protobuf/types/known/structpb 包提供了一种方式来创建和操作 google.protobuf.Struct 类型的数据。google.protobuf.Struct 是一种灵活的数据类型,可以表示任何结构化数据。 以下是如何使用 structpb 包的一些示例: 创建 Struct&a…...
Vue3 + TS + Element-Plus 封装的 Dialog 弹窗组件
弹窗组件中自定义了header 增加了全屏,svg-icon 没有的话可能会报错,换成自己的图标就可以 <template><el-dialog:dialogHeight"dialogHeight":title"dialogTitle"class"dialog min-w-70"v-model"dialogVi…...
大数据技术概述_4.大数据的应用领域
1.制造业的应用 制造业目前正在向信息化和自动化的方向发展。在产品的设计、生产和销售中,越来越多的企业使用计算机辅助设计(CAD)、计算机辅助制造(CAM)等软件,数控机床、传感器等设备,物料需求…...
ABB RobotStudio学习记录(一)新建工作站
RobotStudio新建工作站 最近遇到 虚拟示教器和 Rapid 代码不能控制 视图中机械臂的问题,其实是由于机械臂和工作站不匹配。以下是解决方法。 名称版本Robot Studio6.08 新建一个”空工作站“; 在目标位置新建一个目标文件夹 C:\solution\test࿰…...
雷达通信一体化(含WCSP2023会议论文集学习)
雷达通信一体化,又称雷达通信融合(RADCOM),是一种新兴的技术,它将雷达(通常用于探测和跟踪目标)和无线通信(用于传输信息)的功能结合在一起。这种融合技术的主要目标是提…...
特斯拉擎天柱机器人:工厂自动化的未来
随着技术的进步,工业自动化已经逐步进入了一个新的纪元。特斯拉最近公布的擎天柱机器人Optimus的演示,不仅仅展示了一个高科技机器人的能力,更是向我们揭示了未来工厂的可能性。 特斯拉擎天柱机器人的功能展示 马斯克在最新的演示中向我们展…...
【管理咨询宝藏93】大型制造集团数字化转型设计方案
【管理咨询宝藏93】大型制造集团数字化转型设计方案 【格式】PDF版本 【关键词】国际咨询公司、制造型企业转型、数字化转型 【核心观点】 - 235页大型制造型集团数字化转型方案设计!细节非常详尽,图表丰富! - 系统架构必须采用成熟、具有国…...
【数学建模】天然肠衣搭配问题
2011高教社杯全国大学生数学建模竞赛D题 天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。传统的生产方式依靠人工…...
Dockerfile实践java项目
目的:用java项目测试dockerfil部署(前提是安装好了docker) 部署准备文件如下 1. java项目 java项目demo地址 https://gitee.com/xiaoqu_12/dockerfileDemo.git 或者百度网盘直接下载打包好的jar包 链接:https://pan.baidu.com/s/…...
手势识别技术全解析:从光学、雷达到IoT集成的实战指南
1. 项目概述:从“看见”到“看懂”,手势交互的破局点最近在跟进一个智能家居的集成项目,客户提了个挺有意思的需求:能不能让家里的灯、空调、窗帘,不用说话,也不用找手机,就靠“挥挥手”来控制&…...
Verilog数值转换:数字设计工程师必须掌握的底层规则与工程实践
1. 项目概述:为什么Verilog数值转换是数字设计的基石在数字电路设计和FPGA开发中,Verilog是我们描述硬件行为的主要语言。很多刚入行的朋友,包括我当年,都曾以为写Verilog就是写“另一种编程语言”,把C语言或Python的习…...
U-Boot MMC DM驱动移植实战:从设备树配置到调试排错
1. 项目概述与核心价值最近在为一个基于i.MX6UL的工控板卡适配新的eMMC存储芯片时,又和U-Boot的MMC驱动打了一次交道。这让我想起,很多嵌入式开发者在进行板级移植或更换存储介质时,面对U-Boot中那套基于设备模型(Device Model, D…...
嵌入式Linux嵌入式Linux驱动开发:板级DTS实操与完整实战演练——从修改设备树到点亮LED的完整闭环
嵌入式Linux嵌入式Linux驱动开发:板级DTS实操与完整实战演练——从修改设备树到点亮LED的完整闭环 仓库已经开源!所有教程,主线内核移植,跑新版本imx-linux/uboot都在这里,或者一起来尝试跑7.0的Linux!欢迎…...
VisualHMI LUA脚本中get_float与set_float函数实战详解
1. 项目概述:从界面到逻辑的桥梁在工业HMI(人机界面)开发中,我们常常会遇到一个看似简单却至关重要的需求:如何让屏幕上显示的一个数值,与背后控制器(如PLC)里的一个浮点数寄存器精准…...
GCC __builtin函数避坑指南:让你的跨平台C代码在ARM和x86上都跑得稳
GCC __builtin函数跨平台避坑实战:ARM与x86兼容性深度解析 在嵌入式开发与高性能计算领域,GCC编译器的__builtin函数集一直是开发者提升性能的利器。但当代码需要同时运行在ARM架构的嵌入式设备和x86架构的服务器上时,这些看似美妙的"魔…...
晶晨T972嵌入式主板开发指南:从硬件选型到量产部署
1. 项目概述:一颗“芯”引发的性价比革命 最近在嵌入式开发圈和智能硬件圈里,一个消息传得挺火:亮钻推出了一款基于晶晨T972平台的高性价比主板。对于很多正在寻找稳定、高性能且成本可控的解决方案的开发者、产品经理和创客来说,…...
Unity问题记录
一个物体在Scene窗口看不见,Game窗口能看见。选中它时,打开Gizmos也看不见身上碰撞体的线框。也无法被射线检测到。换成其他Mesh:Open Asset In Context正常显示:把它Revert回预制体,还是不显示。Ctrl D复制一个&#…...
Windows上安装Android应用的终极指南:告别模拟器,开启全新跨平台体验
Windows上安装Android应用的终极指南:告别模拟器,开启全新跨平台体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾在Windows电脑上渴…...
英雄联盟国服换肤终极指南:R3nzSkin免费体验全皮肤
英雄联盟国服换肤终极指南:R3nzSkin免费体验全皮肤 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 厌倦了英雄联盟国服中单调的默认皮肤&am…...
