Это простой скрипт, над которым я работал, но я не смог понять, почему он вел себя неожиданно.
По сути, у меня был массив целых чисел с дубликатами, и я хотел сохранить количество раз, когда элемент встречался в массиве, вместе со значением элемента в 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]);
}
Казалось, все работает. Однако, когда k + 1 не существует в unordered_map, l oop просто завершается, и я не понимаю, почему.
Согласно документации на c ++, оператор [] вставляет новый элемент, если он не существует. Но это ничего не говорит мне о том, что l oop просто не работает.
Я подозреваю, что это как-то связано с тем, что я изменяю unordered_map внутри l oop. Если это так, не могли бы вы, ребята, подробнее рассказать об этом?
Я очень ценю вашу помощь.