2011-12-17 7 views
1

私はエレガントな代替を探しています:このコードは、私が欲しいものをしていますがC++ STLのmap - 条件付きの復帰

if (MyMap.count(x)) return MyMap[x]; 

- 1が存在する場合、それはエントリを返します - 要素の場合には存在しない場合は、マップを2回検索します。よりエレガントな方法がありますか?

+2

あなたは要素が見つからない場合は返すようにしたいですか? –

答えて

5

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

+1

これはひどいことではありません。 –

4

これはそれを行うための一般的な方法は、次のとおりです。

MyMapType::const_iterator i = myMap.find(x); 
if (i != myMap.end()) 
    return i->second; 
+0

+1は、非常に簡潔な優雅なソリューションです。 –