C++中的map用法详解

2023-11-03

目录

1:map的介绍

2:map的操作

(1)定义map类型

(2)输出map中的元素

(3)添加数据

(4)查找数据

(5)删除数据


1:map的介绍

map是C++中STL中的一个关联容器,以键值对来存储数据,数据类型自己定义。它的内部数据结构是红黑树,所有它是由默认排列顺序的,关于map排序这块,大家感兴趣,可以看看这篇文章:C++中的map排序

同时map,它是一对一的,具体就是键值是唯一的,跟哈希表的概念差不多。

2:map的操作

(1)定义map类型

定义map类型,是有模板的,他接受三个参数:
第一个参数是键的数据类型
第二个参数是值的数据类型
第三个参数是排序规则,不写的话就按照默认的排序规则,也就是按照键的升序

举例:
map<int,int>mp;
定义了一个叫mp的map类型,并且键值都是int类型

(2)输出map中的元素

这就是模板,大家记住就行啦!!!
#include<bits/stdc++.h>
using namespace std;
map<string,int>m;

int main()
{
	m["uiui"]=100;
	m["kkkkk"]=999;
	m["asas"]=78;
	m["ns"]=1;
	//第一种遍历输出
	map<string,int>::iterator it;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	cout<<"-----------------------"<<endl;
	//第二种遍历输出
	for(auto i=m.begin();i!=m.end();i++){
		cout<<"键="<<i->first<<" 值="<<i->second<<endl;
	}
	return 0;
}

(3)添加数据

map中添加数据有很多中办法,不过我比较喜欢用两中,一个是数组下标,另外一个是用insert插入pair数据。具体如下:

map<string,int>m;//定义m

1:使用insert添加元素
m.insert(pair<string,int>("sd",19));




2:直接使用数组下标
m["sd"]=19;

insert插入:

#include<bits/stdc++.h>
using namespace std;
map<string,int>m;
int n;
int main()
{
	cout<<"请输入要添加的元素个数:";
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		int id;
		cout<<"键:";
		cin>>s;
		cout<<"值:";
		cin>>id;
		m.insert(pair<string,int>(s,id));//insert添加元素
	}
	//第一种遍历输出
	map<string,int>::iterator it;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	return 0;
}

 

 数组下标:

#include<bits/stdc++.h>
using namespace std;
map<string,int>m;
int n;
int main()
{
	cout<<"请输入要添加的元素个数:";
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		int id;
		cout<<"键:";
		cin>>s;
		cout<<"值:";
		cin>>id;
	    m[s]=id;
	}
	//第一种遍历输出
	map<string,int>::iterator it;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	return 0;
}

(4)查找数据

 

查找数据有两种办法,一个使用find函数还有一个是用count函数(当然了,你查找数据,很明显要查找的
肯定是键吧,没有查找值的吧,哈哈哈)
(1)find函数
find函数查找成功会返回指向它的迭代器,没有找到的话,返回的是end这个迭代器

(2)count函数
count函数的意思就是查找这个键的出现次数,map中键是唯一的,所以它的值要么是0
要么是1,是1不就是查找成功吗,不过它的缺点也可以知道,它可以确定是否存在这个
键,可是却不能确定这个键的位置

 find函数使用:

#include<bits/stdc++.h>
using namespace std;
map<string,int>m;
int n;
int main()
{
	cout<<"请输入要添加的元素个数:";
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		int id;
		cout<<"键:";
		cin>>s;
		cout<<"值:";
		cin>>id;
	    m[s]=id;
	}
	//第一种遍历输出
    map<string,int>::iterator ii,tt;//作为查找返回的迭代器
	map<string,int>::iterator it;
	//查找uuu
	ii=m.find("uuu");
	tt=m.find("kkk");
	if(ii==m.end()){
		cout<<"没有查找到uuu"<<endl;
	}
	else{
		cout<<"查找uuu成功,并且它的值="<<ii->second<<endl;
	}
	if(tt==m.end()){
		cout<<"没有查找到kkk"<<endl;
	}
	else{
		cout<<"查找kk成功,并且它的值="<<tt->second<<endl;
	}
	cout<<"map中的键值对如下 :"<<endl;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	return 0;
}

 count函数使用:

#include<bits/stdc++.h>
using namespace std;
map<string,int>m;
int n;
int main()
{
	cout<<"请输入要添加的元素个数:";
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		int id;
		cout<<"键:";
		cin>>s;
		cout<<"值:";
		cin>>id;
	    m[s]=id;
	}
	//第一种遍历输出
	map<string,int>::iterator it;
	//查找uuu
	int ii=m.count("uuu"),tt=m.count("kkk");
	if(ii==1){
		cout<<"查找成功"<<endl;
	}
	else{
		cout<<"查找失败"<<endl;
	}
	if(tt==1){
		cout<<"查找成功"<<endl;
	}
	else{
		cout<<"查找失败"<<endl;
	}
	cout<<"map中的键值对如下 :"<<endl;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	return 0;
}

 

(5)删除数据

删除map中的数据用到的是erase函数啦

erase里的参数可以直接写键,也可以写迭代器。

erase(m.begin(),m.end());//这句话代表清空m中的内容
#include<bits/stdc++.h>
using namespace std;
map<string,int>m;
int n;
int main()
{
	cout<<"请输入要添加的元素个数:";
	cin>>n;
	for(int i=0;i<n;i++){
		string s;
		int id;
		cout<<"键:";
		cin>>s;
		cout<<"值:";
		cin>>id;
	    m[s]=id;
	}
	//第一种遍历输出
	map<string,int>::iterator it;
	cout<<"map中的键值对如下 :"<<endl;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	m.erase("uuu");
	map<string,int>::iterator ii;
	ii=m.find("opop");
	if(ii!=m.end()){
		m.erase(ii);//存在opop键,就删除
	}
	cout<<"map中的键值对如下 :"<<endl;
	for(it=m.begin();it!=m.end();it++){
		cout<<"键="<<it->first<<" 值="<<it->second<<endl;
	}
	return 0;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中的map用法详解 的相关文章

随机推荐

  • C++编程之构造函数

    学习到了C 的构造函数了 之前上的课比较简单加上自己也有一定的编程基础 所以一直都没觉得有什么压力 今天的课感觉有点难了 构造函数的作用 在对象被创建时 使用特定的值构造对象 将对象初始化为一个特定的初始状态 例如 希望在构造一个Clock
  • python(matplotlib)绘制直方图及阶梯图

    直方图是python绘图中常见的图形之一 以下将介绍5种不同的直方图 然后介绍阶梯图函数以及用阶梯图绘制正弦曲线 直方图的绘制 1 利用matplotlib库文件 画出如下的显示网格线的彩色直方图 代码如下 柱状图带网格线的绘制 impor
  • 云测平台

    1 云测平台 1 进入首页点击标准兼容测试 2 接着点击开始测试 2 上传测试的应用 3 上传应用 完善信息
  • 【YOLOv7】训练自己的数据集 - 目标检测

    YOLOv7训练自己的数据集 1 准备深度学习环境 1 1 代码克隆 1 2 环境安装 1 3 权重下载 1 4 环境测试 2 准备数据 2 1 yolo格式的数据集准备 3 配置训练的相关文件 3 1 修改数据配置文件 3 2 修改模型配
  • 原码表示

    原码的本质 符号位 绝对值 我们下面分析的类型主要是分析纯小数和纯整数的情况 因为在计算机里面 实数是可以转换成下面这两种形式的 纯小数 纯整数 n 位二进制数来表示这个数的原码 符号位占一位 还剩 n 1 位数值位 n 1 位能表达的最大
  • 虚拟机VMware、linux、WSL、Dorker、Multipass选择时

    引言 家里台式机没有装完整开发环境 今天测试一个程序 需要安装个mysql 可以安装个win的mysql 附上window的mysql地址 MySQL Download MySQL Installer 也可以虚拟机里安装一个mysql 登录
  • 一些常用的公共 DNS 服务器 IP 地址

    公共 DNS 服务器 IP 地址 名称 DNS 服务器 IP 地址 阿里 AliDNS 223 5 5 5 223 6 6 6 CNNIC SDNS 1 2 4 8 210 2 4 8 114 DNS 114 114 114 114 114
  • 编写一个IDEA插件之:自动生成Java代码

    我很喜欢IDEA的一键自动生成代码功能 例如自动生成构造方法 字段的Get Set方法 ToString方法等等 除此之外 也有一些插件提供自动生成代码的功能 例如我们所熟悉的GsonFormat插件 使用该插件可以为我们快速的解析json
  • 简易unity网络游戏架构(个人理解)

    客户端架构 客户端流程 点击UI gt panel调用Request的send方法 gt 调用基类得得send gt 调用face的send方法 gt 调用clientManager的send方法 gt 调用message的包装方法 gt
  • Hexo

    前言 搭建博客两个必要条件 博客框架 托管平台 这里框架我们采用Hexo 而平台大部分人会选择GitHub 这里我选择的是Gitee 属于国内的代码托管平台 相比于GitHub来说 访问速度更快 更稳定 环境要求 Git Nodejs 安装
  • OpenAPI安全合规检查

    OpenAPI安全合规检查是指对使用OpenAPI进行接口开发的系统进行安全性和合规性检查 确保系统在设计 开发和运行过程中符合相关的安全标准和法律法规要求 它包含以下内容 访问控制 检查系统是否实现了适当的身份验证和权限管理机制 以确保只
  • 使用HTTP协议发送POST请求

    HTTP发送POST请求常用的类是HttpClientUtil类 这个类提供三个方法 分别是sendPostByForm sendPostByJson sendPostByXml sendPostByForm 处理 application
  • 预编译合约使用问题 | FISCO BCOS开发问题排查

    预编译合约是否支持event事件日志功能 目前不支持 该特性正在规划中 用户可以关注后续的更新 了解更多干货内容 请关注FISCO BCOS开源社区公众号 访问FISCO BCOS代码仓库可下载项目所有源代码 https github co
  • LeetCode(Python)—— 合并两个有序链表(简单)

    合并两个有序链表 概述 将两个升序链表合并为一个新的 升序 链表并返回 新链表是通过拼接给定的两个链表的所有节点组成的 输入 l1 1 2 4 l2 1 3 4 输出 1 1 2 3 4 4 输入 l1 l2 输出 输入 l1 l2 0 输
  • 用 VSCode 写 Python,这 14 个插件不容错过

    可以说 Visual Studio Code 这个编辑器 让微软在开源社区赢回了王者段位 要知道全球 2400 万开发者中有 1400 万称 VSCode 为自己的家 再加上 GitHub 和 VSCode 的结合 几乎所有的程序员的都离不
  • 惠普服务器c3000怎么用显示器,HP BladeSystem c3000

    HP BladeSystem c3000 机箱 HP BladeSystem c3000 Platinum 机柜为 HP BladeSystem 带来了全新功能 c3000 以三个单独的细分市场为目标 1 需要 2 8 台刀片服务器的远程站
  • The Process class relies on proc_open, which is not available on your PHP installation报错解决

    同事laravel框架开发的代码有如下错误日志 production ERROR The Process class relies on proc open which is not available on your PHP instal
  • 服务器的作用

    服务器的作用 1 服务器就好像是一个电话总台一样 而其他的网络设备就像是公共电话 所有的数据传输都要经过服务器的处理 2 服务器作为一个网络节点 为用户提供数据处理服务 最常见的就是使用服务器为自己搭建一个网站 3 服务器运算能力强 可以长
  • Kali更新源时候出现——下载签名无效,解决办法

    一 更新源 vim etc apt sources list 复制下面源码 选择一个 粘贴到里面 并把原来的源进行注释 中科大 deb http mirrors ustc edu cn kali kali rolling main non
  • C++中的map用法详解

    目录 1 map的介绍 2 map的操作 1 定义map类型 2 输出map中的元素 3 添加数据 4 查找数据 5 删除数据 1 map的介绍 map是C 中STL中的一个关联容器 以键值对来存储数据 数据类型自己定义 它的内部数据结构是