std :: map访问运算符已弃用?没有operator []匹配这些操作数

时间:2014-05-23 15:30:36

标签: c++ c++11

根据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)

我没有错误。你对这个问题有任何见解吗?

1 个答案:

答案 0 :(得分:43)

map::operator[]未被弃用。

我猜你试图在derivMapconst的上下文中调用运算符。 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
}