使用unordered_map的索引错误

问题描述 投票:1回答:1

我无法访问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”。我很困惑,不知道机制是什么。有人可以帮我吗?预先谢谢你。

c++ hash reference hashtable
1个回答
0
投票

程序具有未定义的行为,因为在此之后为等于5的mp[it.first+k]添加新元素it.first的迭代器是无效的。

© www.soinside.com 2019 - 2024. All rights reserved.