Неправильная индексация с помощью unordered_map - PullRequest
1 голос
/ 06 ноября 2019

У меня проблемы с доступом к ключу unordered_map. Вот мой код:

#include <iostream>
#include <unordered_map>
#include <vector>

using namespace std;

int main() {
    vector<int> nums = {1,2,3,4,5};
    int k = 2;
    unordered_map<int,int> mp;
    for(auto num : nums)
        mp[num]++;
    for(auto it : mp)
        cout << it.first;
    cout << endl;
    for(auto it : mp)
        cout << mp[it.first+k];
    return 0;
}

Я ожидал, что результат будет

54321

00111

, потому что значение ключаиз «7», «6», «5», «4», «3» - это «0», «0», «1», «1», «1». Но результат был

54321

0000

Обратите внимание, что здесь только четыре "0". Я запутался и не знаю, что это за механизм. Кто-нибудь может мне помочь с этим? Заранее спасибо.

1 Ответ

2 голосов
/ 06 ноября 2019

Программа имеет неопределенное поведение, потому что после добавления нового элемента mp[it.first+k] для it.first, равного 5, итераторы недействительны.

...