c++ 使用map导致死循环的坑

(1)leetcode里1346题

给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。

更正式地,检查是否存在两个下标 i 和 j 满足:

  • i != j
  • 0 <= i, j < arr.length
  • arr[i] == 2 * arr[j]
class Solution {
public:
    bool checkIfExist(vector& arr) {
        mapmymap;
        int count0=0;
        for(int i=0;i

原因:使用map[]访问不存在的关键字后会自动将这个关键字加入map,对应值为默认值。因此最后for循环中mymap.size()随着访问不存在的关键字会不断增大,而mymap.size()增大又会继续循环,导致死循环。(实际上这里没有死循环,关键字过大之后直接报错了)

解决方法:可以先记录mymap.size(),然后使用这个做记录的数作为循环的判断条件


(2)此外,map中还有一个容易导致死循环的地方,就是关于map.size()的使用,它的返回值为一个无符号整型,比如运行如下代码:

mapmy;
cout << my.size()-1;

输出并不会为-1,而是会变成一个很大的值,比如x64:

c++ 使用map导致死循环的坑_第1张图片

解决方法:将其转换为int类型即可:

int(my.size()-1)

 

你可能感兴趣的:(c++,#,STL)