根据http://www.cplusplus.com/reference/map/map/,我可以使用m[k]
或m.at(k)
来访问地图k
中的密钥m
的值。但是,当我尝试
derivMap[fx]
在我的代码中,derivMap是std::map<std::string,std::string>
类型的元素Visual Studio 2013给了我警告
没有operator []匹配这些操作数
但是,当我将代码更改为
时derivMap.at(fx)
我没有错误。你对这个问题有任何见解吗?
答案 0 :(得分:43)
map::operator[]
未被弃用。
我猜你试图在derivMap
为const
的上下文中调用运算符。 map::operator[]
没有const
重载,因为当匹配键不存在时,它可以通过插入元素来修改地图。另一方面,map::at()
确实有const
重载,因为它被设计为在找不到元素时抛出。
void foo(std::map<int, int>& m)
{
int n = m[42]; // OK
}
void bar(const std::map<int, int>& m)
{
int n = m[42]; // ERROR
}