C++ 为什么这个程序没有打印返回的迭代器的正确第二个元素?

C++ 为什么这个程序没有打印返回的迭代器的正确第二个元素?,c++,c++11,C++,C++11,如果map容器中已经存在map元素,我想更改其值,即计算该容器中元素的数量 std :: map < int, int > m; std :: map < int, int > :: iterator itr; int arr[] = { 10, 40, 20, 20, 20, 20, 20, 20, 10, 30, 10, 30, 40 }; for (int i : arr) { itr = m.find(i); if (itr == m.end(

如果map容器中已经存在map元素,我想更改其值,即计算该容器中元素的数量

std :: map < int, int > m;
std :: map < int, int > :: iterator itr;

int arr[] = { 10, 40, 20, 20, 20, 20, 20, 20, 10, 30, 10, 30, 40 };

for (int i : arr) {
    itr = m.find(i);
    if (itr == m.end() ) {
        int value = 0;
        m.insert(std :: make_pair(i, value));
    } else {
        ++itr->second;
    }
}
itr = m.begin();
while (itr != m.end() ) {
    std :: cout << itr->first << " -> " << itr->second << std :: endl;
    ++itr;
}

问题在于行
int值=0。自从第一次遇到值以来,您已经遇到过一次,而不是零次。它应该是
int值=1取而代之


请注意,
for(inti:arr){m[i]+=1;}
将完成代码试图完成的任务。与顺序容器相反,关联容器允许您访问容器中不存在的元素,并在缺少元素时使用value初始化它们(零或默认值初始化它们)。

什么是
,使用
间距
10 -> 2
20 -> 5
30 -> 1
40 -> 1