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

use*_*533 12 c++ c++11

根据http://www.cplusplus.com/reference/map/map/,我可以使用m[k]m.at(k)访问k地图中某个键的值m.但是,当我尝试做的时候

derivMap[fx]
Run Code Online (Sandbox Code Playgroud)

在我的代码中,derivMap是std::map<std::string,std::string>Visual Studio 2013 类型的元素,它给了我警告

没有operator []匹配这些操作数

但是,当我将代码更改为

derivMap.at(fx)
Run Code Online (Sandbox Code Playgroud)

我没有错.你对这个问题有什么了解吗?

jua*_*nza 45

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
}
Run Code Online (Sandbox Code Playgroud)