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

【STL容器】Map使用介绍补充说明

Map

  • 1.前文链接
  • 2.补充说明
  • 3.总结

1.前文链接

C++中Map的使用及介绍+operator[ ]的底层实现(超详细版本+代码+底层剖析)

2.补充说明

  • 统计每个字母出现的次数
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<map>
using namespace std;
void test()
{string arr[] = { "A","A","B","C","A","P","D","H","H","C" };map<string, int>countmap;for (auto& str : arr){countmap[str]++; //不存在就会自己创建 存在就++value值}for (const auto& s : countmap){std::cout << s.first<< ":" << s.second << std::endl;}
}
int main()
{test();return 0;
}
  • 说明

在这段代码中,countmap[str]++ 的行为是通过 std::map 提供的特性来实现的。具体来说,这是利用了 std::map 的下标访问操作符 [] 的行为。
当你使用 countmap[str] 时,如果 str 在 countmap 中不存在,std::map 会自动插入一个键为 str、值为默认值的键值对。对于整型类型,默认值是 0。然后,表达式 countmap[str] 返回对应键的值的引用。
因此,如果 str 在 countmap 中不存在,countmap[str] 就会返回一个新插入的键值对的值的引用,该值被初始化为 0。然后,++ 运算符会对这个值进行递增操作。
如果 str 在 countmap 中已经存在,countmap[str] 就会返回对应键的值的引用,然后对这个值进行递增操作。这样就实现了 “不存在就会自己创建,存在就递增值” 的效果。
总的来说,通过使用 std::map 的下标访问操作符 [],可以实现方便地对键值对进行访问和操作,而且能够在需要时自动插入新的键值对。

3.总结

  1. map中的的元素是键值对
  2. map中的key是唯一的,并且不能修改
  3. 默认按照小于的方式对key进行比较
  4. map中的元素如果用迭代器去遍历,可以得到一个有序的序列
  5. map的底层为平衡搜索树(红黑树),查找效率比较高
  6. 支持[]操作符,operator[]中实际进行插入查找

细节拓展:
链接: C++中的map用法详解

相关文章:

  • MongoDB实战面试指南:常见问题一网打尽
  • 华为配置ISP选路实现报文按运营商转发
  • 【MySQL】锁信息
  • 安装Docker仓库Harbor
  • 自动点名器
  • RockChip Android13 修改U盘挂载目录
  • 【Javaweb】【瑞吉外卖】上传下载实现
  • 使用 Jenkins 管道在 Docker Hub 中构建 Docker 镜像
  • 鸿蒙原生应用再添一批新丁!阿里旗下11款应用、广汽传祺、岚图汽车、零跑汽车、凯翼汽车 入局鸿蒙
  • ES6(三):Iterator、Generator、类的用法、类的继承
  • Kubernetes(k8s第四部分之servers)
  • Hadoop大数据应用:Linux 部署 MapReduce 与 Yarn
  • C语言例:表达式(a=2,3),a+1的值
  • WordPress供求插件API文档:获取市场类型
  • 【Git】error: bad signature 0xb86f1e1 和 bfatal: index file corrupt
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【前端学习】-粗谈选择器
  • 30天自制操作系统-2
  • HashMap剖析之内部结构
  • java 多线程基础, 我觉得还是有必要看看的
  • JS专题之继承
  • Linux快速复制或删除大量小文件
  • magento 货币换算
  • PermissionScope Swift4 兼容问题
  • React Native移动开发实战-3-实现页面间的数据传递
  • SOFAMosn配置模型
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • sublime配置文件
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • ubuntu 下nginx安装 并支持https协议
  • Vue实战(四)登录/注册页的实现
  • 彻底搞懂浏览器Event-loop
  • 给github项目添加CI badge
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 微信小程序设置上一页数据
  • 为视图添加丝滑的水波纹
  • 我看到的前端
  • 详解NodeJs流之一
  • 携程小程序初体验
  • 学习HTTP相关知识笔记
  • 一些关于Rust在2019年的思考
  • 移动端 h5开发相关内容总结(三)
  • 湖北分布式智能数据采集方法有哪些?
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #### go map 底层结构 ####
  • ()、[]、{}、(())、[[]]命令替换
  • (1)Android开发优化---------UI优化
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (day6) 319. 灯泡开关
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (翻译)terry crowley: 写给程序员
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析