C++ map基础概念、map对象创建、map赋值操作、map大小操作、map数据插入、map数据删除、map数据修改、map数据统计

news2025/6/9 7:49:50

map的使用频率很高,仅次于vector,先了解下pair的概念:

pair 概念:

template<class _Ty1, class Ty2>

struct pair{

       _Ty1 first; // 这两个可以是任意的类型

       _Ty2 second;

};

eg:pair<int, int> p(13, 14)

        pair<int, int> p = make_pair(13, 14);

map特点:

1 容器中所有元素都是pair,first不重复

2 pair中的第一个元素都是key(键),第二个元素是value(值)

3 所有元素都会根据元素的key值排序

multimap特点:

1 容器中所有元素都是pair,first可以重复

2 pair中的第一个元素都是key(键),第二个元素是value(值)

3 所有元素都会根据元素的key值排序

容器特点:

线性容器:vector、string、list

树形容器:set、multiset、map、multimap

代码见下,助理解

#include<iostream>
#include<map>
#include<vector>

using namespace std;

int main() {

	pair<int, int> p1;
	p1.first = 13;
	p1.second = 14;
	cout << p1.first << p1.second << endl;

	pair<int, string> p2(2, "333");
	cout << p2.first << p2.second << endl;

	pair<char, int> p3 = make_pair(52, 0);
	cout << p3.first << p3.second << endl;

	map<int, int> m;
	return 0;
}

map对象创建,有常用的几种方式,见以下代码

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {

	// 1 默认构造函数
	map<int, int> m1;
	cout << "ml: " << endl;
	printMap(m1);

	// 2 初始化列表
	map<int, int> m2_1 = {
	   pair<int, int>(1, 10),
	   pair<int, int>(4, 45),
	   pair<int, int>(6, 13),
	   pair<int, int>(5, 50)
	};
	cout << "m2_1:" << endl;
	printMap(m2_1);
	map<int, int> m2_2 ({
   pair<int, int>(1, 10),
   pair<int, int>(4, 45),
   pair<int, int>(6, 13),
   pair<int, int>(5, 50)
	});
	
	cout << "m2_2: " << endl;
	printMap(m2_2);

	// 3 迭代器
	map<int, int> m3(m2_1.begin(), m2_1.end());
	cout << "m3: " << endl;
	printMap(m3);

	// 4 拷贝构造
	map<int, int> m4(m3);
	cout << "m4: " << endl;
	printMap(m4);

	return 0;
}

map赋值操作,代码见下

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	map<int, int> m = {
	pair<int, int>(1, 10),
	pair<int, int>(4, 12),
	pair<int, int>(2, 30),
	pair<int, int>(5, 19),
	};

	cout << "m: " << endl;
	printMap(m);

	// 1 = 赋值
	map<int, int> m1;
	m1 = m;
	printMap(m1);

	// 2 = 赋值列表
	map<int, int> m2;
	m2 = {
	pair<int, int>(1, 15),
	pair<int, int>(4, 14),
	pair<int, int>(2, 35),
	pair<int, int>(5, 15),
	};
	printMap(m2);

	// 

	return 0;
}

map大小操作,代码见下

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	
	map<int, int> m1;
	cout << m1.empty() << endl;
	cout << m1.size() << endl;

	map<int, int> m2 = { pair<int, int>(1, 10), pair<int, int>(4, 15) };
	cout << m2.empty() << endl;
	cout << m2.size() << endl;


	return 0;
}

map数据插入,代码见下:

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	
	map<int, int> m;

	// 1
	m.insert(pair<int, int>(1, 10));
	printMap(m);

	// 2
	m.insert(make_pair(2, 56));
	printMap(m);
	// 3
	m.insert(map<int, int>::value_type(5, 45));
	printMap(m);
	// 4
	m[6] = 8;
	printMap(m);
	// 5
	pair< map<int, int>::iterator, bool> ret = m.insert(make_pair(2, 21)); // 这里直接插入失败,只要有已有的key值,就会插入失败
	cout << ret.second << endl;
	printMap(m);

	// 6
	m[2] = 48; 
	printMap(m); // 这里修改成功,这里却不一样,是可以修改的,这就是两种插入方式的差别

	// 7
	m[0];
	printMap(m); // 这里是没有的key值,也会创建了一个新的值

	return 0;
}

map插入,代码见下

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	
	map<int, int> m = {
	pair<int, int>(1, 4),
	pair<int, int>(3, 14),
	pair<int, int>(2, 42),
	pair<int, int>(4, 49),
	};
    
	for (int i = 4; i <= 5; ++i) {
		map<int, int>::iterator it = m.find(i);
		if (it != m.end()) {
			cout << "找到键值对:(" << it->first << "," << it->second << ")" << endl;
		}
		else {
			cout << "未找到键值:" << i << endl;
		}
	}



	return 0;
}

map数据删除,代码见下

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	
	map<int, int> m = {
	pair<int, int>(1, 4),
	pair<int, int>(3, 14),
	pair<int, int>(2, 42),
	pair<int, int>(4, 49),
	};
	printMap(m);
	// 值删除
	m.erase(1);
	printMap(m);
	// 迭代器删除
	m.erase(m.begin());
	printMap(m);
	// 迭代器区间删除
	m.erase(m.begin(), m.end());
	printMap(m);

	return 0;
}

map数据修改,代码见下:

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	
	map<int, int> m;
	m.insert(make_pair(1, 10));
	m.insert(make_pair(5, 15));
	m.insert(make_pair(2, 45));

	m[2] = 1314;
	printMap(m);

	m[5]++;
	printMap(m);
	return 0;

	m[2] -= 20;
	printMap(m);
}

map数据统计,代码见下:

#include<iostream>
#include<map>
#include<vector>

using namespace std;

void printMap(const map<int, int>& m) {
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++) {
		cout << "key = " << it->first << " " << "value = " << it->second << endl;
	}
	cout << "-------------------------" << endl;
}
int main() {
	
	map<int, int> m = {
		pair<int, int>(1, 4),
		pair<int, int>(3, 45),
		pair<int, int>(4, 55),
		pair<int, int>(8, 49),
	};
	
	for (int i = -1; i < 9; ++i) {
		cout << i << "出现次数为:" << m.count(i) << endl;
	}

	multimap<int, int> mm = {
	pair<int, int>(1, 4),pair<int, int>(1, 4),pair<int, int>(1, 4),pair<int, int>(1, 4),
	pair<int, int>(3, 45),pair<int, int>(3, 45),pair<int, int>(3, 45),pair<int, int>(3, 45),
	pair<int, int>(4, 55),pair<int, int>(4, 55),pair<int, int>(4, 55),
	pair<int, int>(8, 49),pair<int, int>(8, 49)
	};

	for (int i = -1; i < 9; ++i) {
		cout << i << "出现次数为:" << mm.count(i) << endl;
	}
	return 0;
}

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

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

相关文章

(2025)Windows修改JupyterNotebook的字体,使用JetBrains Mono

(JetBrains Mono字体未下载就配置,这种情况我不知道能不能行,没做过实验,因为我电脑已经下载了,不可能删了那么多字体做实验,我的建议是下载JetBrains Mono字体,当你使用VsCode配置里面的JetBrains字体也很有用) 首先参考该文章下载字体到电脑上 VSCode 修改字体为JetBrains …

小番茄C盘清理:专业高效的电脑磁盘清理工具

在使用电脑的过程中&#xff0c;我们常常会遇到系统盘空间不足、磁盘碎片过多、垃圾文件堆积等问题&#xff0c;这些问题不仅会导致电脑运行缓慢&#xff0c;还可能引发系统崩溃。为了解决这些问题&#xff0c;小番茄C盘清理应运而生。它是一款专业的C盘清理软件&#xff0c;能…

AUTOSAR实战教程--标准协议栈实现DoIP转DoCAN的方法

目录 软件架构 关键知识点 第一:PDUR的缓存作用 第二:CANTP的组包拆包功能 第三:流控帧的意义 配置过程 步骤0:ECUC模块中PDU创建 步骤1:SoAD模块维持不变 步骤2:DoIP模块为Gateway功能添加Connection ​步骤3:DoIP模块为Gateway新增LA/TA/SA ​步骤4:PDUR模…

【MySQL系列】MySQL 导出表数据到文件

博客目录 一、使用 SELECT INTO OUTFILE 语句基本语法参数详解注意事项实际示例 二、使用 mysqldump 工具基本语法常用选项实际示例 三、使用 MySQL Workbench 导出导出步骤高级选项 四、其他导出方法1. 使用 mysql 命令行客户端2. 使用 LOAD DATA INFILE 的逆向操作3. 使用编程…

vue3:十五、管理员管理-页面搭建

一、页面效果 实现管理员页面,完成管理员对应角色的中文名称显示,实现搜索栏,表格基本增删改查,分页等功能 二、修改问题 1、修改搜索框传递参数问题 (1)问题图示 如下图,之前搜索后,传递的数据不直接是一个value值,而是如下图的格式 查询可知这里传递的数据定义的是…

基于51单片机的红外防盗及万年历仿真

目录 具体实现功能 设计介绍 资料内容 全部内容 资料获取 具体实现功能 具体功能&#xff1a; &#xff08;1&#xff09;实时显示年、月、日、时、分、秒、星期信息&#xff1b; &#xff08;2&#xff09;红外传感器&#xff08;仿真中用按键模拟&#xff09;检测是否有…

【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案

以下是全国产化飞腾AI加固服务器采用飞腾昇腾PCIe Switch解决方案&#xff1a; &#x1f5a5;️ 一、硬件架构亮点 ‌国产算力双擎‌ ‌飞腾处理器‌&#xff1a;搭载飞腾FT2000/64核服务器级CPU&#xff08;主频1.8-2.2GHz&#xff09;&#xff0c;支持高并发任务与复杂计算&a…

应用层协议:HTTPS

目录 HTTPS&#xff1a;超文本传输安全协议 1、概念 2、通信过程及关键技术 2.1 通信过程 1> TLS握手协商&#xff08;建立安全通道&#xff09; 2> 加密数据传输 2.2 关键技术 1> 对称加密算法 2> 非对称加密 3> 对称加密和非对称加密组合 4> 数…

【ArcGIS技巧】—村庄规划规划用地规划状态字段生成工具

"国土空间规划后续也是走向数据治理&#xff0c;数据建库已经是涉及到城市规划、建筑、市政、农业、地理信息、测绘等等方方面面。不得不说以后数据库建设跟维护&#xff0c;是很多专业的必修课。小编就湖南省的村庄规划建库过程中规划用地用海中规划状态字段写了个小工具…

【PCIe总线】-- inbound、outbound配置

PCI、PCIe相关知识整理汇总 【PCIe总线】 -- PCI、PCIe相关实现 由之前的PCIe基础知识可知&#xff0c;pcie的组成有&#xff1a;RC&#xff08;根节点&#xff09;、siwtch&#xff08;pcie桥&#xff09;、EP&#xff08;设备&#xff09;。 RC和EP&#xff0c;以及EP和EP能…

分布式锁实战:Redisson vs. Redis 原生指令的性能对比

分布式锁实战&#xff1a;Redisson vs. Redis 原生指令的性能对比 引言 在DIY主题模板系统中&#xff0c;用户可自定义聊天室的背景、图标、动画等元素。当多个运营人员或用户同时修改同一模板时&#xff0c;若没有锁机制&#xff0c;可能出现“甲修改了背景色&#xff0c;乙…

react+taro 开发第五个小程序,解决拼音的学习

1.找一个文件夹 cmd 2.taro init 3.vscode 找开该文件夹cd help-letters 如&#xff1a;我的是(base) PS D:\react\help-letters> pnpm install 4.先编译一下吧。看下开发者工具什么反应。 pnpm dev:weapp 5.开始规则。我用cursor就是不成功。是不是要在这边差不多了&…

kafka(windows)

目录 介绍 下载 配置 测试 介绍 Kafka是一个分布式流媒体平台&#xff0c;类似于消息队列或企业信息传递系统。 下载 Kafka对于Zookeeper是强依赖&#xff0c;所以安装Kafka之前必须先安装zookeeper 官网&#xff1a;Apache Kafka 下载此安装包并解压 配置 新建log…

基于安卓的文件管理器程序开发研究源码数据库文档

摘 要 伴随着现代科技的发展潮流&#xff0c;移动互联网技术快速发展&#xff0c;各种基于通信技术的移动终端设备做的也越来越好了&#xff0c;现代智能手机大量的进入到了我们的生活中。电子产品的各种软硬技术技术的发展&#xff0c;操作系统的不断更新换代&#xff0c;谷歌…

EMC VNXe 存储系统日志收集方法

写在前面 有朋友找来看看VNXe的故障&#xff0c;这种问题总是要收集日志&#xff0c;顺便这里也分享给大家。 注意&#xff0c;VNXe和VNX 属于完全不同的产品&#xff0c;不要看名字很类似&#xff0c;操作系统已经完全重构了&#xff0c;如果说是否有联系&#xff0c;大概就…

从“人找政策”到“政策找人”:智能退税ERP数字化重构外贸生态

离境退税新政核心内容与外贸企业影响 &#xff08;一&#xff09;政策核心变化解析 退税商店网络扩容 新政明确鼓励在大型商圈、旅游景区、交通枢纽等境外旅客聚集地增设退税商店&#xff0c;并放宽备案条件至纳税信用M级企业。以上海为例&#xff0c;静安区计划新增1000家退…

以人类演示视频为提示,学习可泛化的机器人策略

25年5月来自清华大学、上海姚期智研究院和星动纪元&#xff08;RoboEra&#xff09;公司的论文“Learning Generalizable Robot Policy with Human Demonstration Video as a Prompt”。 最近的机器人学习方法通​​常依赖于从通过遥操作收集的大量机器人数据集中进行模仿学习…

SOC-ESP32S3部分:36-适配自己的板卡

飞书文档https://x509p6c8to.feishu.cn/wiki/RP4UwPrsKi4xuQkKLAAcKxD3n1b 如果你自己画了PCB板&#xff0c;需要把自己绘制的板卡配置小智AI工程&#xff0c;可以参考此文档。 下载源码 克隆或下载源码到本地&#xff0c;这里以1.5.5为例&#xff0c;大家可以自行修改其它版…

LLMs 系列科普文(8)

八、模型的自我认知 接下来我们聊聊另一种问题&#xff0c;即模型的自我认知。 网上经常经常可以看到人们会问大语言模型一些关于认知方面的问题&#xff0c;比如“你是什么模型&#xff1f;谁创造了你&#xff1f;” 说实话&#xff0c;其实这个问题有点无厘头。 之所以这么…

机器学习基础相关问题

机器学习相关的基础问题 K-means是否一定会收敛 K-means是否一定会收敛 K-means算法在有限步数内一定会收敛&#xff0c;但收敛到的可能是局部最优解而非全局最优解。以下是详细分析&#xff1a; K-means 的优化目标是最小化 样本到其所归属簇中心的距离平方和&#xff08;SSE…