小编hru*_*uja的帖子

在 for 循环中修改 std::unordered_map 时,未正确更新它

尝试使用以下代码片段更新无序映射,使其仅包含小写字母,但它似乎在删除一个键值对 { [33 '!']: 3 } 后停止,并退出循环,使映射的其余部分未被访问并打印部分更新的地图。

 for (auto &i : m)
        if (!(i.first >= 'a' && i.first <= 'z'))
            m.erase(i.first);
Run Code Online (Sandbox Code Playgroud)

以下调试图像揭示了上述内容

在此输入图像描述

在此输入图像描述

完整代码如下:

#include <iostream>
#include <unordered_map>
#include <algorithm>    
using namespace std;
int main()
{
    string line = "Try! Try! Try! until you succeed";
    //getline(cin, line);
    unordered_map<char, int> m;
    for (int i = 0; line[i]; i++)
    {   
        char lower = (char)tolower(line[i]);
        if (m.find(lower) == m.end())
            m.insert(make_pair(lower, 1));
        else
            m[lower]++;
    }

    for (auto &i : m) //only updates until ! 
        if …
Run Code Online (Sandbox Code Playgroud)

c++ unordered-map segmentation-fault

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

标签 统计

c++ ×1

segmentation-fault ×1

unordered-map ×1