C ++ Map迭代器陷入无限循环

C++ Map iterator stucks in infinite for loop

我正在使用 for loopC++ 中迭代 map,但它陷入了无限循环。我已经搜索了其他类似的问题,最接近的是 this question,但对该问题的回答并没有回答我的查询,因为在那个问题中,作者正在对地图对象进行更改,但我没有对for loop.

期间的地图对象

我的代码如下(我尝试评论不同的行并发现无限循环是由第 11 行引起的(else statement)但我无法找出确切的问题):

int main(){
    map<int,int> dic; //dic is the relevant map object
    dic[0]=1; dic[1]=1; dic[2]=1; dic[3]=1; //dic = {0:1, 1:1, 2:1, 3:1}

    int k=1;
    int sol=0;

    for(map<int,int>::iterator iter=dic.begin(); iter!=dic.end(); iter++){
        int a=iter->first; int b=iter->second;
        if(k==0) sol+=b*(b-1)/2;
        else sol+=b*dic[a+k]; //after some trials, I found that problem is in this line but I couldn't figure out the problem
    }
    return sol;
}

这一行:

sol+=b*dic[a+k];
如果键 a+k 不存在,

是否向 map 添加一个新元素。

a 这里 一个键,所以 dic[a] 可以正常工作。但是,当 k 不是 0 时,您 运行 有访问不存在的地图元素的风险。

如果要检查特定密钥是否存在,请使用 map::find

此外,您观察到这段代码会导致无限循环,这是有效的,但在技术上是不正确的。键类型只能有有限数量的值,因此 最终 循环将终止。不过,这可能需要相当长的时间。这假设您只使用不会溢出 int.

的键