今天在leetcode写了一个题  两数之和

这是AC代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
        vector<int> a;
        map<int,int> p;
        for (int i=0;i<nums.size();i++)
            p[nums[i]]=i;
        map<int,int>::iterator z;
        if (p.count(-6)==0) cout<<"fk"<<endl;
        for (int i=0;i<nums.size();i++)
            if (p.count(target-nums[i])==1 && p[target-nums[i]]!=i)
            {
                cout<<p.count(target-nums[i])<<endl;
                cout<<i<<" "<<target-nums[i]<<endl;
                a.push_back(i);
                a.push_back(p[target-nums[i]]);
                break;
            }
        return a;
    }
};

这是WA代码

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target)
    {
        vector<int> a;
        map<int,int> p;
        for (int i=0;i<nums.size();i++)
            p[nums[i]]=i;
        for (int i=0;i<nums.size();i++)
            if (p[target-nums[i]]!=i&&p.count(target-nums[i])==1)
            {
                a.push_back(i);
                a.push_back(p[target-nums[i]]);
                break;
            }
        return a;    
    }
};

发现了一个map count的问题

他但凡只要使用过p[a] ,不管有没有赋值,都默认已经有这个元素了,倘若没有赋值,则为0

c++ map 中的 count_C++黑科技