如何在const成员数中访问stl::map呢?例如如下代码:

string ConfigFileManager::MapQueryItem(const string& name) const {if (_map_name_value.find(name) != _map_name_value.end()) {return _map_name_value[name];}return "";
}

  上面的代码会报错:error C2678: 二进制“[”: 没有找到接受“const std::map<_Kty,_Ty>”类型的左操作数的运算符(或没有可接受的转换)

  这个错误说明const函数是不能直接访问map的,有如下三种方法解决:

(1)去掉函数const属性

  这种方法改变了原有设计,肯定是不行的。

(2)将stl::map成员声明为mutable

  这种方法更改了变量的特征,不过是可行的也符合逻辑的。

(3)通过const迭代器访问map成员

  这种方法最好,也是STL自带支持的const访问方式。参考代码修改如下:

string ConfigFileManager::MapQueryItem(const string& name) const {map<string, string>::const_iterator cit = _map_name_value.find(name);if (cit != _map_name_value.end()) {return cit->second;}return "";
}

转载于:https://www.cnblogs.com/kuliuheng/p/5738703.html

stl::map之const函数访问相关推荐

  1. C++ STL map 中insert函数返回值问题

    当map中的insert函数插入失败后,返回值应该是 **pair<iterator, bool>**型,第二个参数bool值在插入成功时返回true,失败时返回false 那么第一个返回 ...

  2. C++ 笔记(24)— STL map 类(map实例化、插入、查找、删除)

    1. STL 映射类简介 map 和 multimap 是键-值对容器,支持根据键进行查找,区别在于,后者能够存储重复的键,而前者只能存储唯一的键. 为了实现快速查找, STL map 和 multi ...

  3. C++ map容器和multimap容器(STL map容器)

    目录 1. 关联容器和map容器概述 2. map容器 2.1 map的创建以及初始化列表 2.2 map容器的一般常用属性(方法) 2.3 插入数据 2.4 数据的访问和遍历 2.5 数据的删除 2 ...

  4. 正确使用stl map的erase方法

    先声明:下面的文章是针对windows的用法,因为std::map的erase函数的windows的实现版本是返回一个std::map的迭代器,但是STL标准里面的该函数的返回值确是: map.era ...

  5. STL map与Boost unordered_map - 有何不可的日志 - 网易博客

    STL map与Boost unordered_map - 有何不可的日志 - 网易博客 STL map与Boost unordered_map 2012-03-30 16:06:26|  分类: c ...

  6. 除了允许变量被const函数修改之外,'mutable'关键字是否有任何其他用途?

    前段时间我遇到了一些用<code>mutable关键字标记类的成员变量的代码. 据我所知,它只是允许你修改const方法中的变量: class Foo { private: mutable ...

  7. c语言中set 函数,C里边的STL里边的Set函数

    set函数的用法: 这是一个集合函数,这个函数可以处理很多的元素,这些元素可以去重,把相同的元素都去掉,剩下不一样的元素,而且还可以自动给这些元素来排序,从小到大的顺序来排序. 这里我们先来举个例子: ...

  8. C++ STL begin()和end()函数(深入了解,一文学会)

    C++ STL标准库提供的所有容器做了系统的讲解.无论是序列式容器还是关联式容器(包括哈希容器),不仅模板类内部提供有 begin() 和 end() 成员方法,C++ STL 标准库中还提供有同名且 ...

  9. STL map使用

    map属于c++STL中的一种,是有不能重复的关键字和与之相关的值组成(若键值重复,则这个键值所对应的值为最后一次所赋给的值): #include <string.h> #include ...

最新文章

  1. 区块链简史:解读这场技术革命的前世今生
  2. linux的ls命令详解
  3. ASP。NET 中SQL防注入攻击
  4. IEnumerable和IEnumerator 详解
  5. sqlite自己主动更新数据库
  6. WeChall_Training: Register Globals
  7. 小程序绘图工具painter-json文件绘制保存分享图-可点击任意元素触发函数
  8. [css] display有哪些值?分别说明他们的作用是什么?
  9. 第67课 选择排序 改进例67.1 《小学生C++编程入门》
  10. 如何检查python的库是否安装成功_机器学习之Python编程库的安装
  11. 发送ajax的get请求,AJAX之发送GET请求
  12. android 整合最新X5WebView 以及离线安装教程
  13. 苹果手机5s无需越狱免流_苹果越狱手机端自签名插件
  14. 串级控制PID 炉温控制
  15. 街头篮球服务器未响应,我的生涯我做主 《街头篮球》生涯联赛FAQ
  16. cogs908. 校园网
  17. 离开谷歌回归斯坦福,“AI女神”李飞飞新动向揭晓
  18. shell编程文档资料
  19. 公众号快速注册并认证小程序功能介绍
  20. Redis分布式锁/Redis的setnx命令如何设置key的失效时间(同时操作setnx和expire)

热门文章

  1. 数据结构:八皇后、N皇后
  2. 开课吧课堂:Kubernetes集群环境常见问题解决
  3. 深入了解人工智能专业怎么样
  4. Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析(1)
  5. NetScaler的Web 2.0 Push技术
  6. The system is running in low-graphics mode
  7. 职场老实人的十大升职障碍
  8. 在Macbook M1上安装Parallels Desktop 17虚拟机和Originlab 2021
  9. 删除指定目录下的所有文件与更改文件扩展名
  10. 牛客 黑龙江大学程序设计竞赛重现 19-4-25 D