`[]`运算符导致地图上的编译错误

时间:2016-09-30 16:45:52

标签: c++ c++11 stdmap

我正在尝试从for循环中的地图中获取元素。按照cppreference上的示例,我试试这个:

#include <iostream>
#include <map>

using namespace std;

int main()
{
    map<int, int> mapping;

    mapping.insert(pair<int, int>(11,1));
    mapping.insert(pair<int, int>(12,2));
    mapping.insert(pair<int, int>(13,3));

    for (const auto &it : mapping)
        mapping[it]++;


    cout << "array: ";
    for (const auto &it : mapping)
        cout << it.second << " ";

    return 0;
}

使用gcc:

给出以下编译错误
main.cpp: In function 'int main()':
main.cpp:15:16: error: no match for 'operator[]' (operand types are 'std::map<int, int>' and 'const std::pair<const int, int>')
         mapping[it]++;

如果我理解正确,则问题是auto已解析为std::pair<const int, int>,但未定义[]运算符。我想知道是否有办法让这个工作。

请参阅完整编译错误here

1 个答案:

答案 0 :(得分:6)

如何

for (auto &it : mapping)
    ++it.second;

第一次循环?