Any Standard Template Library (STL) pro doesn't need to be told this but for somebody moving from MFC to the STL like me, the following would no doubt be handy.
The problem is that std::map
creates a new object anytime you have map[key]
, even as an rvalue. So here is a super simple template function to quickly check if a map has a key.
template<typename T>
bool has_key( const T& map, typename const T::key_type& key )
{
T::const_iterator iter = map.find( key );
return iter != map.end();
}
// eg. has_key( my_map, "key" );
The tiny bit of magic here is the typename
in typename const T::key_type&
. typename
is required due to deep c++ voodoo that I really don't understand.
Or you could just…
map.count( key ) > 0;
Always learning.