c++ - 为什么这个程序没有打印返回的迭代器的正确第二个元素?
问题描述
如果地图容器中已经存在地图元素的值,我想更改它的值,即计算该容器中元素的数量
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;
}
我得到了错误的输出:
10 -> 2
20 -> 5
30 -> 1
40 -> 1
解决方案
问题出在线路上int value = 0;
。自从您第一次遇到一个值以来,您已经遇到过一次,而不是零次。应该是int value = 1;
。
请注意,这for (int i : arr) { m[i] += 1; }
将完成您的代码尝试执行的操作。与顺序容器相反,关联容器允许您访问容器中尚不存在的元素,如果它们丢失,则 value 会初始化它们(零或默认初始化它们)。