За исключением случаев, когда у вас есть действительно веская причина для этого, избегайте запутывания таких вещей, как Java, как это, и старайтесь использовать STL так, как можете.Для этого вы можете использовать псевдонимы типа
using FooMap = std::map<int, Foo*>; // Maybe use a smart pointer instead here?
using FooMapList = std::map<int, FooMap>; // Maybe List is not an appropriate name for a map
Теперь у вас есть элемент Foo
, который вы только что создали, и вы хотите вставить его в список карт, для этого вам нужен способ выбрать, в какомкарту в списке вы хотите вставить его.Я предполагаю, что вы вставите в первую карту в списке:
auto FooMap::emplace(int key, Foo* value)
{
return m_newFoo.emplace(key, value);
}
void FooMapList::insertFoo(Foo* newFooObj)
{
// If the map for `getfoobar` does not exist yet, operator[] will create it
auto& mapPtr = m_fooMapList[newFooObj->getfoobar()];
if (nullptr == mapPtr)
mapPtr = new FooMap();
mapPtr->emplace(
newFooObj->getfoobar(),
newFooObj
);
}
Обратите внимание, что я не занимался очисткой памяти.Я предлагаю вам попробовать использовать умные указатели, когда это применимо (std::unique_ptr
и std::shared_ptr
)