1. ホーム
  2. c++

[解決済み] std::map デフォルト値

2022-11-01 13:52:23

質問

デフォルト値を指定する方法はありますか? std::map 's operator[] は、キーが存在しない場合に返されるのですか?

どのように解決するのですか?

いいえ、ありません。最も簡単な解決策は、これを行うための独自のフリーテンプレート関数を書くことです。次のようなものです。

#include <string>
#include <map>
using namespace std;

template <typename K, typename V>
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のアップデート

目的: 一般的な連想コンテナ、およびオプションのコンパレータとアロケータパラメータを考慮する。

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;
}