STL容器map的下标运算符[]
来源:互联网 发布:黄金软件 编辑:程序博客网 时间:2024/05/29 14:12
在STL中,map是一个关联式容器,它提供一对一的数据处理能力,即其中每一个元素都是一个键值对,通过一个唯一的关键字,可以唯一映射到对应的数据值。而map中重载了下标运算符[],通过下标操作,开发人员可以很方便地根据关键字获取到对应的值。虽然使用方便,但是还是有一些地方容易出现问题,值得大家的注意。
下面代码的输出结果会什么呢?
上面代码的目的是,判断mapInfo["name"]的值是否为"kevin",如果是则修改mapInfo["name"]的值为"man",最后输出mapInof["name"]的值。代码看似没有问题,但是输出却永远为空,原因就是在判断语句里面对map的下标运算符[]的错误使用。
map的下标运算符[]的作用是:若key存在,则返回相应的value;若key不存在,则对该key对应的value赋一个对应value类型数据的默认值并返回。
在上面的代码中,对于if ("kevin" == mapInfo["name"])这行代码,首先会判断mapInfo中关键字为name的项是否存在,此时程序发现没有该项,因此会在mapInfo中插入一项("name", ""),此时mapInfo["name"]的值就为空字符串,这就导致了if判断的结果永远都为false,进不了if代码块里面修改数据。map下标运算符[]使用固然方便,但是使用不当却可能出现严重的问题,因此需要注意一下。
下面也是一个关于map下标运算符[]的例子,用于深化对上面结论的记忆:
上面代码中,map的key是string类型,而value则是Obj*类型,即Obj类型的指针,而mapStr2Obj中并不在关键字为"abc"的项,对于mapStr2Obj["abc"],程序会自动插入一项("abc", NULL),此时关键字为"abc"的项对应的值是一个空指针,若不小心使用到这个之后指针访问数据时,就会出现Segmentation fault了。不同编译器对于指针赋的默认值是不一样的,当map的value类型是指针的时候,就要注意野指针或空指针问题了。
从上面的例子可以知道,当需要判断map中是否存在指定的key值时,就不能直接使用map的下标运算符了,这时候可以使用find函数,如下面代码所示:
通过find函数判断指定的sKey是否在mapKV中,写起来有点恶心,不过这样可以避免了错误的发生。
- STL容器map的下标运算符[]
- STL容器map的下标运算符[]
- STL容器map的下标运算符[]
- STL容器vector的下标运算符[]
- STL容器vector的下标运算符[]
- C++STL中常用的容器下标[]运算
- c++中stl的map的[]取下标运算符需要慎用
- STL map容器[]运算符陷阱
- c++stl map数组下标的使用
- Map容器的用法(STL)
- Map容器的用法(STL)
- Map容器的用法(STL)
- 下标运算符的重载
- STL map的insert操作与下标操作的区别
- STL容器的赋值运算符可以更灵活吗?
- STL容器map的一段代码
- stl map容器中指针的释放
- STL中map容器的元素插入
- PAT乙级 1067. 试密码(20)
- JSP中的九大内置对象
- Java的4大访问修饰符
- 文件系统的特殊权限以及ACL的相关用法
- 截图,草图,便签,最近应用
- STL容器map的下标运算符[]
- Android 7.0 Settings Summary 小记
- oracle 服务器类的安装 服务设置 连接数据库
- POJ 1050 To the Max
- Java Web项目中解决中文乱码方法总结
- 001-配置JDK环境变量
- AVUpate编译
- UESTC 2017 Summer Training #16 Div.2(亚洲之旅)
- 分页查询案例