这是我正在处理的一个简单脚本,但我无法理解它为什么会出现意外行为。
基本上,我有一个带有重复的整数数组,我想将元素在数组中出现的次数以及元素的值存储在 unordered_map 中,
然后,对于映射 { k , v }中的每个条目,我需要确定数组中是否存在k + 1,如果存在,则对其进行处理。你可以在下面看到代码。
vector<int> A = {1, 1, 3, 2, 5, 3};
for (int i = 0; i < A.size(); ++i) m[A[i]]++;
int ans = 0;
for (const auto& e: m) {
if (m[e.first + 1] > 0) ans = max(ans, e.second + m[e.first + 1]);
}
Run Code Online (Sandbox Code Playgroud)
一切似乎都奏效了。但是,当unordered_map 中不存在k + 1时,循环就会终止,我不明白为什么。
根据 c++ 文档,运算符 [] 插入一个新元素,如果它不存在。但这并没有告诉我任何关于循环不起作用的信息。
我怀疑这与我正在修改循环内的 unordered_map 的事实有关。如果是这种情况,你们能详细说明一下吗?
我真的很感谢你的帮助。