尝试使用以下代码片段更新无序映射,使其仅包含小写字母,但它似乎在删除一个键值对 { [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)