从函数返回unordered_map中的unordered_map

时间:2013-11-13 21:38:15

标签: c++ unordered-map

我正在尝试从unordered_map中返回unordered_map的副本。

以下代码更清楚地说明了我的问题:

typedef std::unordered_map<std::string, int> Foo;
typedef std::unordered_map<std::string, Foo> FooContainer;    

...

FooContainer bar;
// etc

...

Foo GetSubmap(std::string name)
{
    // ???
}

我不知道如何做到这一点,因为unordered_map.find(foo)返回容器的迭代器。

非常感谢提前!

1 个答案:

答案 0 :(得分:2)

如果您想要返回空地图,如果找不到任何元素,您可以这样做:

Foo GetSubmap(std::string name)
{
    FooContainer::const_iterator f = bar.find( name );
    return f != bar.end() ? f->second : Foo();
}

或者你可以在没有找到元素的情况下抛出异常。您也可以使用bar[name],但是您应该知道它有副作用 - 每次查找非现有元素时,空Foo都会插入bar