【发布时间】:2021-01-02 22:20:07
【问题描述】:
我正在尝试查看 map 中是否存在特定键,如果存在,那么我想将其值增加 1。但是在运行程序时出现错误
在抛出 'std::out_of_range' 的实例后调用终止 什么():地图::在
为什么会这样 out_of_range 有人可以帮忙吗?
b 是这个函数中的一个映射。 itr 是一个用于访问其元素的迭代器
for(int i=0;i<n;i++)
{
ct=0;
cin>>a[i];
for(itr=b.begin();itr!=b.end();itr++)
{
if(itr->first==a[i])
ct++;
else
continue;
}
if(!ct)
{
b.at(a[i])++;
}
else
{
b.insert(pair <int,int>(a[i],1));
}
}
}
【问题讨论】:
-
a 只是一个整数数组。
-
见this page about std::map::at,可能
a[i]不在map的keyset中,从而导致out_of_range异常。 -
if(!ct)应该是if(ct)。请注意,您的 for 循环可能应该只替换为std::map::find -
整个外部
i循环体可以用cin >> a[i]; auto p = b.insert({a[i],0}); p.first++;替换。它也会更有效率。