私はエレガントな代替を探しています:このコードは、私が欲しいものをしていますがC++ STLのmap - 条件付きの復帰
if (MyMap.count(x)) return MyMap[x];
- 1が存在する場合、それはエントリを返します - 要素の場合には存在しない場合は、マップを2回検索します。よりエレガントな方法がありますか?
私はエレガントな代替を探しています:このコードは、私が欲しいものをしていますがC++ STLのmap - 条件付きの復帰
if (MyMap.count(x)) return MyMap[x];
- 1が存在する場合、それはエントリを返します - 要素の場合には存在しない場合は、マップを2回検索します。よりエレガントな方法がありますか?
std::map::find()
は、iterator
を返します。
end()
ではなく、反復子を逆参照できます。map
を再度検索する必要はありません。簡単な例については
:コード量の点で、おそらく、よりエレガントではない、しかし、あなたが現在持っているものよりも能率的
typedef std::map<char, int> test_t;
test_t test;
test.insert(std::make_pair('a', 1));
test_t::iterator found = test.find('a');
if (found != test.end())
{
std::cout << found->second;
}
else
{
std::cout << "Not found";
}
。
これはひどいことではありません。 –
これはそれを行うための一般的な方法は、次のとおりです。
MyMapType::const_iterator i = myMap.find(x);
if (i != myMap.end())
return i->second;
+1は、非常に簡潔な優雅なソリューションです。 –
あなたは要素が見つからない場合は返すようにしたいですか? –