小编Jho*_*nRM的帖子

C++ - unordered_map 运算符 [],意外行为

这是我正在处理的一个简单脚本,但我无法理解它为什么会出现意外行为。

基本上,我有一个带有重复的整数数组,我想将元素在数组中出现的次数以及元素的值存储在 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 的事实有关。如果是这种情况,你们能详细说明一下吗?

我真的很感谢你的帮助。

c++ loops unordered-map

2
推荐指数
1
解决办法
96
查看次数

标签 统计

c++ ×1

loops ×1

unordered-map ×1