Search code examples
c++stdmap

std::map default value


Is there a way to specify the default value std::map's operator[] returns when an key does not exist?


Solution

  • No, there isn't. The simplest solution is to write your own free template function to do this. Something like:

    #include <string>
    #include <map>
    using namespace std;
    
    template <typename K, typename V>
    const V & GetWithDef(const  std::map <K,V> & m, const K & key, const V & defval ) {
       typename std::map<K,V>::const_iterator it = m.find( key );
       if ( it == m.end() ) {
          return defval;
       }
       else {
          return it->second;
       }
    }
    
    int main() {
       map <string,int> x;
       ...
       int i = GetWithDef( x, string("foo"), 42 );
    }
    

    C++11 Update

    Purpose: Account for generic associative containers, as well as optional comparator and allocator parameters.

    template <template<class,class,class...> class C, typename K, typename V, typename... Args>
    V GetWithDef(const C<K,V,Args...>& m, K const& key, const V & defval)
    {
        typename C<K,V,Args...>::const_iterator it = m.find( key );
        if (it == m.end())
            return defval;
        return it->second;
    }