C++ STL map - 条件返回

Dav*_*rtz 0 c++ stl map

我正在寻找一个优雅的替代品:

if (MyMap.count(x)) return MyMap[x];
Run Code Online (Sandbox Code Playgroud)

虽然这个代码做了我想要的 - 它返回一个条目(如果存在) - 在元素存在的情况下,它搜索地图两次.有更优雅的方式吗?

Joh*_*web 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";
}
Run Code Online (Sandbox Code Playgroud)

也许在代码量方面不是更优雅,但比你现在拥有的更有效.


DS.*_*DS. 5

这是执行此操作的典型方法:

MyMapType::const_iterator i = myMap.find(x);
if (i != myMap.end())
   return i->second;
Run Code Online (Sandbox Code Playgroud)