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

STL之map(映射/地图)

须知:在尖括号中定义你容器里的元素类型 map<string,int> people

使用前提,#include<map>

1.特征

map元素存储在键值对中

Map 映射通常实现为二叉搜索树

2.映射中的元素包括:

  • 可通过键(而不是索引)访问,并且每个键都是唯一的。
  • 按其键自动按升序排序。
  • map<keytype, valuetype>mapName,也就是说上面的string是key,int是value。

3.声明时赋值方式;

eg:map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

4.访问方式

,无法通过索引访问,需要通过key访问对应的value值,也可以通过.at()来访问

eg:

#include <iostream> #include <map> using namespace std; int main() { // Create a map that will store the name and age of different people map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; // Get the value associated with the key "John" cout << "John is: " << people["John"] << "\n"; // Get the value associated with the key "Adele" cout << "Adele is: " << people.at("Adele") << "\n"; return 0; }

运行结果:

更改值

可以people["John"] = value,也可以people.at("John") = value

添加值:

eg:people[key] = value

也可以使用.insert({key,value})

map中不能出现key相同的元素,但是value是可以相等的

5.删除元素

用.erase(),只用删除Key值,全删可以用.clear

eg:.erase("John")

6.查看地图大小

.size()

7.查询是否为空

.empty()

8..count()

还可以使用该函数检查是否存在特定元素。.count(key)

如果元素存在,则返回 (true),如果元素不存在,则返回 (false

eg:

#include <iostream> #include <map> using namespace std; int main() { map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; cout << people.count("John")<<endl; cout<< people.count("chen"); return 0; }

运行结果:

9.遍历map

map不同于前几个(vector,stack,set,queue,list)只储存一种类型的元素,map存储一组元素,可能相同也可能不同,所以遍历方式也不同于其他。我们需要用auto关键字,这个关键字可以自动识别元素的类型,在循环中每次访问需要用.first和.second访问每个元素的key和value。、

eg:

#include <iostream> #include <map> using namespace std; int main() { map<string, int> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} }; for (auto pair : people) { cout << pair.first << " is: " << pair.second << "\n"; } return 0; }

输出结果:

通过输出结果我们可以发现,map自动把key给排序了,默认是升序。若想在遍历输出时是按照key的降序输出可以这样定义map<string, int,greater<string>> people = { {"John", 32}, {"Adele", 45}, {"Bo", 29} };

10.swap()函数

将 map 的内容与 map x 的内容交换

#include <iostream> #include <map> using namespace std; int main(void) { map<char, int> m1 = { {'a', 1}, {'b', 2}, {'c', 3}, {'d', 4}, {'e', 5}, }; map<char, int> m2; m2.swap(m1); cout << "Map2 contains following elements" << endl; for (auto it = m2.begin(); it != m2.end(); ++it) cout << it->first << " = " << it->second << endl; cout << "Map1 contains following elements" << endl; for (auto it = m1.begin(); it != m1.end(); ++it) cout << it->first << " = " << it->second << endl; cout<<m1.size(); return 0; }

运行结果:

unordered_map

无序映射是像字典一样的数据结构。 它是(键,值)对的序列,其中只有单个值与每个唯一键相关联。 它通常被称为关联数组。它可以根据它们的键快速检索单个元素。 它还实现了直接访问运算符(下标运算符[]),它允许使用其键值作为参数直接访问映射值。他不会按照键的值来进行排序,而是根据其哈希值组织成桶,以允许直接通过键值快速访问各个元素。

在通过键访问单个元素时,无序映射比映射执行得更好。 但是对于范围迭代,它们的性能相当低。

大家根据需求来选取map还是unordered_map

使用注意:最新学习时了解到,map并不是严格按照下标来取值的,比如

map<int,string> mymap{{1,"wuhu"},{2,"wuhan"},{3,"ningbo"}};

可能大多数人也认为取mymap[0]的时候指的时{1,“wuhu"}这份值,但其实是意思是找key为0的value值,当然,目前mymap里没有这个key值,所以会打印空,并当再打印一次整个mymap时,会发现0已经被加入mymap里了,作为新key,对应的value是空,可以进行赋值。这里使用时需要注意。

http://www.jsqmd.com/news/1309038/

相关文章:

  • N_m3u8DL-RE:跨平台流媒体下载的5大实用技巧全面指南
  • 【AI语音视频解说黄金法则】:20年实战总结的7大避坑指南与3步提效法
  • 文心一言插件市场实战手册:7大高转化插件开发流程、3类审核失败根因、5个上线加速技巧
  • 吧台椅线上选购,哪些口碑指标更值得参考? - 阿雨生活聊家具
  • 3分钟学会Balena Etcher:最安全的SD卡与USB镜像烧录工具
  • 个人AI快速开发工具推荐:2024零基础新手低代码平台盘点
  • 仓颉开源社区学习赛火热开赛!提交 PR 领京东卡,等你来抢!
  • 小一寸照可以自己拍吗?手机快速制作方法 - 跑政通
  • Linux Optimizer深度解析:12大核心功能让你的VPS性能飙升
  • AI自动标注几何图元准确率暴跌42%?——2024 CVPR最新基准测试暴露训练数据致命盲区
  • 2026年GEO源头厂商选型避坑指南,杭州爱搜索领跑前五强 - 品牌报告
  • 《天道》阅读笔记
  • python 常用代码
  • 微信小程序制作平台哪个好?2026商家选择指南 - 生活动态圈
  • Go 表驱动测试实战:用 t.Run 子测试组织可维护的单元测试
  • AI系统重构迁移全链路拆解(含TensorFlow→PyTorch迁移Checklist):217个真实故障点+修复代码片段
  • 如何判断数学建模质量好坏
  • Qwen图像编辑快速一体化解决方案:4步生成专业AI图片的完整指南
  • 5分钟掌握ROCm性能分析:rocProfiler从入门到精通指南
  • 终极指南:如何用QuickRecorder轻松搞定macOS屏幕录制
  • 智能刀具柜哪些品牌值得选?2026高性价比产品型号推荐清单! - 匠言榜单
  • 2026年安康AIGC应用工程师怎么报名?中山优才教育报考指南 - 人工智能报名机构推荐
  • Textractor终极指南:3分钟掌握游戏文本提取技术,轻松突破语言障碍!
  • 文心一言插件市场准入白皮书(2024Q2最新版):从零通过审核的12个硬性指标与3个隐藏门槛
  • 深度解析:Bad Apple病毒项目如何实现Windows窗口实时动画渲染
  • 长春芬尼服务商哪家专业:【芬尼】持证运维 - 松梢月冷
  • 武汉男生学什么技术前景广?武汉万通汽车学校地址,新能源、智能制造专业详解 - 湖北找学校
  • 开发者必看:Flask-Security核心组件解析与自定义配置技巧
  • 企业私有化与云端部署AI快速开发工具选型:全场景最好用
  • USB转串口转换器:工业通信的桥梁与实战指南