Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

map<int,int> counter; counter[nums[i]]++;

Tags:

c++

I saw this code on leetcode,it's a question to find the majority element.Here is the question description:

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times.

You may assume that the array is non-empty and the majority element always exist in the array.

And there is an answer in discuss with these code:

class Solution
{
public:
    int majorityElement(vector<int>& nums) 
    {
        map<int, int> cnt;
        for(int i=0; i < nums.size(); i++)
            cnt[ nums[i] ]++;

        int n = nums.size();
        for(map<int, int>::iterator iter=cnt.begin(); iter!=cnt.end();iter++)
            if( iter->second > n/2 )
                return iter->first;
    }
};

So I am curious about this line:cnt[ nums[i] ]++;

Don't I need to initialize the cnt[nums[i]]=0 first? I thought I need to do it first or there will be memory leakage because no existing value for key nums[i] to perform ++. Am I wrong?

like image 322
leo lee Avatar asked Nov 22 '25 17:11

leo lee


1 Answers

std::map::operator[] is defined to default initialise the value at the given key if no such value already exists. From the standard; [map.access]:

T& operator[](const key_type& x);

1 Effects: If there is no key equivalent to x in the map, inserts value_type(x, T()) into the map.

For int, the default value is 0, so no further work must be done.

like image 165
Mankarse Avatar answered Nov 25 '25 06:11

Mankarse