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

c++ std::map 使用注意事项

1. std::map 如果在添加元素前,直接去取 key-value,会怎样 ?

先说答案,map 在添加元素前,直接使用会给 key 添加默认的 value! 

2. 问题背景 

某项目代码报出个严重的bug,具体现象是某个 map 的变量,还没有添加元素,但是获取到数据。经过各种定位发现代码的一个bug,就是 map 变量的使用问题:

std::map<std::string, int> map_Test;int getKeyValue(std::string key) 
{int value = map_Test[key];if(map_Test.count(key) != 0UL) {xxxx(value);}
}

上面代码发现问题没有? 问题就是 map 在取值前,要find 或者count不为0后才能取值。否则map 会给取得key,赋值默认得值。比如上面得 就会给 赋值默认的值 0;

3. 测试代码验证

#include <iostream>
#include <map>
#include <string>using namespace std;
int main()
{std::map<std::string, int> mTest;mTest["a"];auto it = mTest.find("a");if (it != mTest.end()) {cout << "find map: " << mTest["a"];}return 0;
}

上面代码编译运行,结果如下:

g++ map.cpp

./a.out
find map: 0

 4. 结论

c++ std::map 在取值前,要先 find 到值,或者count 值不为0才能取值。如果 map 没有添加key-value,直接取 key,会获取到默认类型的 value。

http://www.lryc.cn/news/101301.html

相关文章:

  • Camera HAL/ISP 专业术语大全
  • POI的简单入门
  • 如何将笔记本作为另一台电脑的副屏显示
  • 深入理解正则表达式:为什么它在Java中如此重要?
  • jmeter实现webservice接口测试
  • js 四舍五入保留一位小数 求百分比
  • 文件上传漏洞总结2
  • 【组内工作】木马回联
  • 未来将会有更多基于 Cortana 的设备
  • 嵌入式硬件系统的基本组成
  • def __init__(self, **kwargs):中的**kwargs是什么意思
  • web攻击面试|网络渗透面试(三)
  • 数据分析方法
  • Spring全家桶---白虎篇
  • 深度优先搜索|79, 695,212
  • 论文阅读与管理方法论
  • 基于OAI与Ueransim的5G网络切片平台构成简述
  • 论文笔记:Adjusting for Autocorrelated Errors in Neural Networks for Time Series
  • DataEase开源BI工具安装_数据全量_增量同步_大屏拖拽自动生成_多数据源支持_数据血缘分析---大数据工作笔记0183
  • 如何提升程序员的软素质
  • msvcp100.dll丢失怎么修复,这三个常用的修复方法可以解决
  • python实现递推算法解决分鱼问题
  • 【LeetCode】142.环形链表Ⅱ
  • 16.Netty源码之ChannelPipeline
  • “使用Spring Boot构建微服务应用的最佳实践“
  • redis高可用之主从复制,哨兵,集群
  • 【Ajax】笔记-原生jsonp跨域请求案例
  • QT--day2(信号与槽,多界面跳转)
  • 热备份路由协议原理
  • 模拟实现定时器