2011-12-17 47 views
1

我在找一個優雅的更換到:C++ STL地圖 - 條件返回

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

儘管此代碼我想要做什麼 - 如果存在的話,它返回一個條目 - 的情況下元素確實存在,它會搜索地圖兩次。有沒有更優雅的方式?

+2

你想返回,如果一個元素是不是發現了什麼? – 2011-12-17 05:54:37

回答

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

也許不是在代碼量方面更優雅,但比你現在有更多的effcient。

+1

好吧,那不是很糟糕。 – 2011-12-17 06:00:37

4

這是典型的方式做到這一點:

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

+1爲優雅的解決方案,非常簡潔。 – 2011-12-17 06:32:22