如何解决在unordered_map cpp中遍历的问题
当我遍历unordered_map时,只有一半的测试用例通过,但是当我使用vector时,所有的用例都通过了,我的代码中是否有任何错误?
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n; cin>>n;
unordered_map<int,int> mp;
vector<int> v; v.reserve(n);
while(n--)
{
int x,y; cin>>x>>y;
int h=y+x;
if(mp[h]==0){ v.push_back(h); }
mp[h]++;
}
int s; cin>>s; int sa=0;
for(auto i:mp)
{
int j=i.first+s;
long long u=mp[j]*(i.second);
sa=sa+u;
}
cout<<sa;
}
解决方法
在此循环中:
for(auto i:mp)
{
int j=i.first+s;
long long u=mp[j]*(i.second);
sa=sa+u;
}
在mp
不是mp[j]
中的键的情况下,您进行j
时可能会修改unordered_map
。在range-for循环中修改要迭代的范围会导致未定义的行为。
您可以使用find
来检查密钥j
是否存在,并在这种情况下执行其他操作(但不能修改unordered_map
)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。