C++ std::map access运算符已弃用?没有运算符[]与这些操作数匹配
根据,我可以使用C++ std::map access运算符已弃用?没有运算符[]与这些操作数匹配,c++,c++11,C++,C++11,根据,我可以使用m[k]或m.at(k)访问地图m中键k的值。然而,当我试着去做 derivMap[fx] 在我的代码中,其中derivMap是类型为std::mapVisualStudio2013的元素,它向我发出警告 没有运算符[]与这些操作数匹配 但是,当我将代码更改为 derivMap.at(fx) 我没有错。您对这个问题有什么见解吗?不受欢迎 我猜您试图在derivMap为const的上下文中调用运算符map::operator[]没有const重载,因为它可以在不存在与键匹配的元
m[k]
或m.at(k)
访问地图m
中键k
的值。然而,当我试着去做
derivMap[fx]
在我的代码中,其中derivMap是类型为std::map
VisualStudio2013的元素,它向我发出警告
没有运算符[]与这些操作数匹配
但是,当我将代码更改为
derivMap.at(fx)
我没有错。您对这个问题有什么见解吗?不受欢迎
我猜您试图在derivMap
为const
的上下文中调用运算符map::operator[]
没有const
重载,因为它可以在不存在与键匹配的元素时通过插入元素来修改映射<另一方面,code>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
}
void foo(标准::映射与建模)
{
int n=m[42];//好的
}
空栏(常数标准::映射和建模)
{
int n=m[42];//错误
}
我更喜欢.find
而不是.at
。我从来没有使用过。
@MooingDuck我想这取决于缺少元素是否是错误(以及是否有C++11)。在我的例子中,问题是@juanchopanza正确建议的const环境,它也可能取决于方法签名,例如void SomeClass::foo()const{int n=this->m[42]}
其中m是类“SomeClass”的字段。在这种情况下,const导致了这种行为。