在VS调试器中观看地图条目

时间:2018-10-30 21:41:04

标签: c++ visual-studio debugging

我想知道这是否是我最有可能的错误/误解或其他原因。

我在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

为什么会这样?我不确定。

2 个答案:

答案 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”进行调用,您应该会看到预期的行为