C++ map容器在const修饰下将无法使用“[]“来获取键值
参考博客:https://blog.csdn.net/benobug/article/details/104903314
编写程序时无意中发现使用const修饰的map容器变量无法使用重载的[]运算符来获取相应的键值.
const map<string, int> m;
m["1"] x
m.at("1") ok
此时访问需要用at。
对于const的对象使用了非const的成员函数:std::map::[]本身不是const成员函数(操作符),对于不在map中的关键字,使用下标操作符会创建新的条目,改变了map
解决方法是使用at成员函数
测试代码:
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;
int main() {
map<string, int> m;
m["1"] = 1;
const map<string, int>& m2 = m;
// 错误的访问方式
// cout<<m2["1"]<<endl;
// 正确的访问方式
cout<<m2.at("1")<<endl;
return 0;
}