Я пытаюсь вернуть копию 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) возвращает итератор для контейнера.
Спасибо заранее!
Если вы хотите вернуть пустую карту, если элемент не найден, вы можете сделать это так просто:
Foo GetSubmap(std::string name)
{
FooContainer::const_iterator f = bar.find( name );
return f != bar.end() ? f->second : Foo();
}
Или вы можете выбросить исключение, если элемент не найден. Вы также можете использовать bar[name]
, но вы должны знать, что у него есть побочный эффект — пустой Foo будет вставлен в bar
каждый раз, когда вы ищете несуществующий элемент.
Других решений пока нет …