我在找一個優雅的更換到:C++ STL地圖 - 條件返回
if (MyMap.count(x)) return MyMap[x];
儘管此代碼我想要做什麼 - 如果存在的話,它返回一個條目 - 的情況下元素確實存在,它會搜索地圖兩次。有沒有更優雅的方式?
我在找一個優雅的更換到:C++ STL地圖 - 條件返回
if (MyMap.count(x)) return MyMap[x];
儘管此代碼我想要做什麼 - 如果存在的話,它返回一個條目 - 的情況下元素確實存在,它會搜索地圖兩次。有沒有更優雅的方式?
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。
好吧,那不是很糟糕。 – 2011-12-17 06:00:37
這是典型的方式做到這一點:
MyMapType::const_iterator i = myMap.find(x);
if (i != myMap.end())
return i->second;
+1爲優雅的解決方案,非常簡潔。 – 2011-12-17 06:32:22
你想返回,如果一個元素是不是發現了什麼? – 2011-12-17 05:54:37