我想知道这是否是我最有可能的错误/误解或其他原因。
我在VS 2017社区中有以下代码:
#include <map>
int main()
{
std::map<int, int> myMap{};
myMap[1] = 4;
myMap[4] = 2;
return 0;
}
现在,当我进行调试时,我想尝试观察得到的地图的某些条目
myMap[1] no operator "[]" matches these operands
为什么会这样?我不确定。
答案 0 :(得分:2)
调试器将myMap
视为const
。这是为了阻止您更改状态以进行观察。
[]
的两个重载为
T& operator[]( const Key& key );
T& operator[]( Key&& key );
在const map
上都不可调用,因为它们会插入默认的构造条目,如果key
不存在则返回。
您可以改为使用at
,如果不存在key
则抛出该错误,并且const
限定的过载也可以
const T& at( const Key& key ) const;
答案 1 :(得分:0)
在这里,您已经声明地图名称为“地图”。因为地图对象类型已经使用了名称“ map”,所以您不能以这种方式使用它。
如果您将地图名称更改为其他名称,例如
std::map<int, int> myMap{}
并使用该名称而不是单词“ map”进行调用,您应该会看到预期的行为