C ++ Map迭代器陷入无限循环
C++ Map iterator stucks in infinite for loop
我正在使用 for loop
在 C++
中迭代 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
.
的键
我正在使用 for loop
在 C++
中迭代 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
.