C++中map的用法

news2024/12/23 23:00:37

博主简介:Hello大家好呀,我是陈童学,一个与你一样正在慢慢前行的人。
博主主页:@陈童学哦
所属专栏:C++STL

在这里插入图片描述

前言:Hello各位小伙伴们好!欢迎来到本专栏C++STL的学习,本专栏旨在帮助大家了解并熟悉使用C++中的STL,C++中的STL(标准模板库)是相当好用的,🍉🍉🍉所以大家赶紧订阅一起学起来叭!那么话不多说接下来就进入本文C++中map的学习。

📢📢📢站点

  • ⭐一、map的简介
  • ⭐二、map的定义及初始化
  • ⭐三、map中常用的成员函数
  • ⭐四、map的遍历
  • ⭐五、map的真题巩固
  • ⭐六、写在最后

⭐一、map的简介

map是C++STL中的一个关联式容器,它提供一对一的hash,它类似于Python中的字典,也有着键值对(Key-Value)这一说。我们可以通过键(Key)来找到值(Value),但需要注意的是,每个键(Key)只能在map中出现一次哦!

map可以储存多种类型的数据,它主要用于一对一映射的情况,map内部的实现是通过自建一颗红黑树,这颗树可以对数据进行自动排序。所以在map内部所有的数据都是有序的,这个功能以后可以方便我们解决很多问题。

使用map时需要包含头文件:

#include<map>

⭐二、map的定义及初始化

  • 定义
    map<数据类型1,数据类型2>变量名
    例:
//map的定义 
map<int,int> m1; //定义一个Key数据类型为int,Value数据类型为int的map容器m1 
map<double,double> m2; //定义一个Key数据类型为double,Value数据类型为double的map容器m2 
map<int,string> m3; //定义一个Key数据类型为int,Value数据类型为string的map容器m3

⭐三、map中常用的成员函数

map中的一些函数:

//map中的常用函数
find()  //返回键Key所在的位置(迭代器)
insert() //向map中插入元素
1. m1.insert(pair<int,string>(1,"ctx"));  //插入一个pair对象 
2. m1.insert(map<int,sting>::value_type(2,"cxt")); //插入一个value_type数据
3. m1[111]="66666"; //用“数组赋值”的方法插入 
erase() //删除元素
1. m2.erase(it); //it为被删除元素的迭代器
2. m2.erase(key);//key为被删除的键
3. m2.erase(first,last); //删除区间内的所有元素
size() //返回map中映射的对数
clear()//清空map中的所有元素
begin() //返回指向map头部的迭代器
end() //返回指向map尾部+1的迭代器
rebegin() //返回指向map尾部的迭代器
rend() //返回指向map头部-1的迭代器
empty() //判断是否为空 

⭐四、map的遍历

  • 通过iterator迭代器遍历
#include<iostream>
#include<map>
using namespace std;
int main()
{
	map<int,string> m1;
	m1[1]="ctx";
	m1[2]="cxt";
	m1[3]="txc";
	m1[10]="txt";
	m1[5]="666";
	map<int,string>::iterator it;
	for(it=m1.begin();it!=m1.end();it++)
	{
		cout<<it->first<<" "<<it->second<<endl;
	}
	//it->为Key,it->second为Value 
}

⭐五、map的真题巩固

下面是PTA中数据结构与算法题目集(中文)的一道25分题,对于我们刚学习完本文map用法后的小伙伴来说可能稍有难度,可以自己尝试一下喔!

下方为题目链接!!!!!!!!

--------------------7-49 打印学生选课清单--------------------
题目详情:
假设全校有最多40000名学生和最多2500门课程。现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单。注意:每门课程的选课人数不可超过 200 人。

输入格式:
输入的第一行是两个正整数:N(≤40000),为前来查询课表的学生总数;K(≤2500),为总课程数。此后顺序给出课程1到K的选课学生名单。格式为:对每一门课,首先在一行中输出课程编号(简单起见,课程从1到K编号)和选课学生总数(之间用空格分隔),之后在第二行给出学生名单,相邻两个学生名字用1个空格分隔。学生姓名由3个大写英文字母+1位数字组成。选课信息之后,在一行内给出了N个前来查询课表的学生的名字,相邻两个学生名字用1个空格分隔。

输出格式:
对每位前来查询课表的学生,首先输出其名字,随后在同一行中输出一个正整数C,代表该生所选的课程门数,随后按递增顺序输出C个课程的编号。相邻数据用1个空格分隔,注意行末不能输出多余空格。

输入样例:
10 5
1 4
ANN0 BOB5 JAY9 LOR6
2 7
ANN0 BOB5 FRA8 JAY9 JOE4 KAT3 LOR6
3 1
BOB5
4 7
BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
5 9
AMY7 ANN0 BOB5 DON2 FRA8 JAY9 KAT3 LOR6 ZOE1
ZOE1 ANN0 BOB5 JOE4 JAY9 FRA8 DON2 AMY7 KAT3 LOR6
输出样例:
ZOE1 2 4 5
ANN0 3 1 2 5
BOB5 5 1 2 3 4 5
JOE4 1 2
JAY9 4 1 2 4 5
FRA8 3 2 4 5
DON2 2 4 5
AMY7 1 5
KAT3 3 2 4 5
LOR6 4 1 2 4 5

AC代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	map<string,vector<int>>mp;
	int n,k;
	cin>>n>>k;
	int l,r;
	string s;
	s.resize(5);
	for(int i=1;i<=k;i++)
	{
		cin>>l>>r;
		for(int j=1;j<=r;j++)
		{
			cin>>s;
			mp[s].push_back(l);
		}
	}
	while(scanf("%s",&s[0])!=EOF)
	{
		cout<<s<<" "<<mp[s].size();
		if(mp[s].size())
		{
			sort(mp[s].begin(),mp[s].end());
			for(auto it=mp[s].begin();it!=mp[s].end();it++)
			{
				cout<<" "<<*it;
			}
		}
		cout<<endl;
	}
}

⭐六、写在最后

OK本文的学习就到此结束啦,希望本文可以帮助到各位有需要的小伙伴们喔,也希望各位小伙伴们不要吝惜手里的三连哦!❤️❤️❤️

💕 回头看,轻舟已过万重山,向前看,前路漫漫亦漫漫。

🍁🍁🍁那么我们下期再见!拜拜ヾ(•ω•`)o
在这里插入图片描述

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

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

相关文章

接口测试五个重要测试点

一、功能测试 接口的功能是否实现、接口是否按照设计文档实现&#xff08;如&#xff1a;username参数写成了user&#xff09;———接口文档是在整个开发中使用&#xff0c;所以接口设计要与接口文档的设计保持一致。 1、兼容性测试&#xff1a;如&#xff1a;接口进行了调整…

【ACM训练】2023 河南 CCPC省赛 vp

2023 河南 CCPC省赛 题目链接 VP赛况&#xff1a; 目录 2023 河南 CCPC省赛赛况及总结赛况总结 补题 赛况及总结 赛况 开场&#xff1a;我提前打印了题册&#xff0c;于是我们开始分开看题目&#xff0c;我先看了A&#xff0c;发现很签&#xff0c;遂上机&#xff0c;8 m…

【软考系统规划与管理师笔记】第1篇 信息系统综合知识

目录 写在前面 1. 信息的基本概念 2. 信息的定量描述 3. 信息的传输模型 3. 信息系统的主要性能指标 4. 信息化的层次 5. 电子政务和电子商务 6. 信息系统 6.1 系统开发的方法 6.2 信息系统总体规划 6.3 信息系统规划内容 7 IT战略 8 习题收集 写在前面 系统规划与…

从8连挂到面面offer,我只用了一个月,面试25K测试岗血泪经验分享给你

直到如今&#xff0c;我才敢把这段经历分享出来&#xff0c;毕竟一个多月前&#xff0c;我是经历了面试八连挂的人。作为一只骄傲的软件测试工程师&#xff0c;恨不得找一块豆腐撞死。但是在闭关修炼了一个多月之后&#xff0c;重新出来面试&#xff0c;面试了五家公司&#xf…

《人月神话》译文修订明细(2)-读者可以对照修改

《人月神话》译文修订明细&#xff08;1&#xff09;-读者可以对照修改 《人月神话》译文修订如下&#xff0c;读者可以对照自己手上的书修改。 相关阅读 这回真要动刀子-征集《人月神话》中译本的翻译修正>> 第一章&#xff08;续&#xff09; 原译文 水平边界以下…

Graphpad Prism9.5.1 安装教程 (含Win/Mac版)

GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件&#xff0c;它可以将科学图形、综合曲线拟合&#xff08;非线性回归&#xff09;、可理解的统计数据、数据组织结合在一起&#xff0c;除了最基本的数据统计分析外&#xff0c;还能自动生成统…

Mysql中千万数据查询浅析

假如mysql数据库中有一千万数据&#xff0c;如何进行查询&#xff0c;查询效率如何&#xff0c;下面进行简单的分析。 1、准备数据 也许有些人没遇见过上千万数据量的表&#xff0c;没关系&#xff0c;下面通过sql脚本准备一下数据&#xff0c;环境为&#xff1a;mysql5.7. 1…

提示msvcr120.dll丢失怎么办?由于找不到msvcr120.dll如何修复?

msvcr120.dll 是 Microsoft Visual C 文件中的一个重要组件。它是一种动态链接库&#xff0c;包含了很多函数&#xff0c;提供了许多基础的 C 运行时支持。这个库文件的主要功能是提供 C 应用程序的运行时环境&#xff0c;它是一些常用的 C 运行时库文件的集合。这些库包括了 m…

队列:数据结构中的排队之道

本篇博客会讲解队列这种数据结构&#xff0c;并使用C语言实现。 概况 什么是队列呢&#xff1f;队列是一种先进先出的数据结构&#xff0c;即First In First Out&#xff0c;简称FIFO。队列有2端&#xff0c;分别是队头和队尾&#xff0c;规定只能在队尾插入数据&#xff08;…

华为OD机试真题 Java 实现【单核CPU任务调度】【2023Q2 200分】

一、题目描述 现在有一个CPU和一些任务需要处理&#xff0c;已提前获知每个任务的任务D、优先级、所需执行时间和到达时间。 CPU同时只能运行一个任务&#xff0c;请编写一个任务调度程序&#xff0c;采用“可抢占优先权调度”调度算法进行任务调度&#xff0c;规则如 下&…

嵌入式Android系统启动基本分析

目录 第一&#xff1a;Android系统架构图&#xff1a; 第二&#xff1a;Android 系统启动流程如下&#xff1a; 第三&#xff1a;Android 层级分析 第四&#xff1a;案例分析 第五&#xff1a;Android 权限问题 上一篇我们讲了 Linux 系统的启动流程&#xff0c;本文讲解一…

QTableWidget样式设置

QTableWidget的样式分为几个部分&#xff1a; 分别是&#xff1a; 外框&#xff1a;QTableWidget 表头&#xff1a;QHeaderView 表头字段&#xff1a;QHeaderView::section 表格&#xff1a;QTableWidget::item 选中的表格&#xff1a;QTableWidget::item::selected 水平滚动条…

课时七—进程同步(一)

1、同步与互斥的基本概念 1)临界资源 &#xff08;1&#xff09;临界资源&#xff1a;是一次仅允许一个进程使用的共享资源。各进程采取互斥的方式&#xff0c;实现共享的资源称作临界资源。属于临界资源的硬件有&#xff0c;打印机&#xff0c;磁带机等&#xff1b;软件有消息…

javase个人小结

一、数据类型 二、运算符&#xff08;需要注意的&#xff09; /&#xff1a;如果是int类型&#xff0c;那么会保留整数&#xff0c;舍去余数 列如&#xff1a;10/3 3 优先级&#xff1a;拿不准就加括号&#xff0c;括号优先级最高 三、类和对象 什么是封装&#xff0c;继承…

连接器信号完整性仿真教程 三

本文将讲解CST边界&#xff08;Boundary&#xff09;、背景&#xff08;Background&#xff09;的概念及背景材料与边件设置。边界与背景是CST仿真电磁的基础&#xff0c;有必要了解它&#xff0c;并掌握其设置方法与步骤。并以两个实例演示了具体设置的操作。 一 背景、边界与…

深度学习—目标检测标注数据集

深度学习之目标检测 PASCAL数据集 PASCAL VOC挑战赛&#xff08;The PASCAL Visual Object Classes&#xff09;是一个世界级的计算机视觉挑战赛&#xff0c;PASCAL全称&#xff1a;Pattern Analysis&#xff0c;Statical Modeling and Computational Learning&#xff0c;是…

磐维数据库应用案例荣获2022年度杭州商用密码应用优秀案例二等奖

2023年5月8日上午&#xff0c;在2023西湖论剑数字安全大会商用密码应用论坛上发布了2022年度杭州商用密码应用优秀案例&#xff0c;其中由中国移动通信集团浙江有限公司和中移动信息技术有限公司联合申报的 《基于磐维数据库的CRM营销系统商用密码应用案例》荣获二等奖。 20…

Linux下gdb基础命令演示,及命令汇总图

提示&#xff1a;本文主要介绍了什么是gdb&#xff0c;以及gdb指令及其具体使用案例 ————故不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。 文章目录 一、gdb模式下命令一览。1.1基本命令&#xff1a;1.2 断点命令&#xff1a;1.3 数据命令…

实时频谱分析-2.3实时频谱分析

实时频谱分析 频谱分析要想归入实时类别中&#xff0c;必须没有间隙地、不确定地处理关心的频宽内包含的所有信息。RSA 必须获得时域波形中包含的全部信息&#xff0c;把信息转换成频域信号。实时完成这一点必须满足多个重要的信号处理要求&#xff1a; 1&#xff09;提供足够…

【计算思维题】少儿编程 蓝桥杯青少组计算思维真题及详细解析第3套

少儿编程 蓝桥杯青少组计算思维题及详细解析第3套 1、浩浩的左手边是 A、兰兰 B、贝贝 C、青青 D、浩浩 答案:B 考点分析:主要考查小朋友们的观察能力,从给定的图中可以看到:浩浩的左手边是贝贝,所以答案B 2、2 时 30 分,钟面上时针和分针形成的角是什么角 A、钝角…