28

What is the difference in getting a value through aMap[key] and aMap.at(key) in C++?

Ruggero Turra
  • 16,929
  • 16
  • 85
  • 141
unj2
  • 52,135
  • 87
  • 247
  • 375

2 Answers2

44

If you access a key using the indexing operator [] that is not currently a part of a map, then it automatically adds a key for you. This is a huge caveat, and take this into consideration. For this reason, I prefer using the indexing operator [] for setting, and .find() / .at() for lookup.

Another advantage of using .at() over [] is the fact that it can operate on a const std::map, whereas [] won't.

Richard J. Ross III
  • 55,009
  • 24
  • 135
  • 201
25

In C++11 map::at exists (who knew?).

It throws an exception if the key doesn't exist, find returns aMap.end() if the element doesn't exist, and operator[] value-initializes a new value for the corresponding key if no value exists there.

Luchian Grigore
  • 253,575
  • 64
  • 457
  • 625