我正在尝试从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)返回容器的迭代器。
非常感谢提前!
答案 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
。