Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ counting instances / histogram using std::map

Tags:

c++

map

histogram

I have seen sample code similar to the following:

std::string s = "Hello World!";
std::map<char, std::size_t> h;

for (std::string::const_iterator i=s.cbegin(); i!=s.cend(); ++i)
{
    ++h[*i];
}

assert(h['l'] == 3);

This seems to rely on the value type being zeroed on the first occurence of each letter. Is this guaranteed even when using something like a std::size_t which has no default constructor resetting it to zero?

like image 724
paperjam Avatar asked Dec 16 '22 07:12

paperjam


2 Answers

Indeed that's how map works: The []-operator is mutating and will create the object of mapped type if it does not exist yet. Since size_t value-initializes to zero, you're all fine.

like image 125
Kerrek SB Avatar answered Dec 31 '22 02:12

Kerrek SB


Quoting MSDN:

POD and scalar types will always be zero initialized if instantiated with the default constructor syntax.

So, assuming that map creates new entries at missing keys using a default constructor then yes, size_t will be initialised to zero.

like image 20
RobH Avatar answered Dec 31 '22 00:12

RobH