У меня есть карта, которая выглядит какСтирание вложенной элементы карты
typedef std::map<int, std::set<float>> innerMap;
typedef std::map<long, innerMap> outerMap;
Я хочу сделать следующее:
1. Я хочу, чтобы удалить внутренние элементы карты для ключа внешней карты.
2. Затем я хочу стереть внешний ключ карты, если он содержит 0 внутренних элементов карты.
Для первого сценария, я написал код, как:
outerMap mapA;
//assuming this map contain an element
//longx is key in outer element, intx is key of inner element
std::map<int, std::set<float>>::const_iterator innerIter = mapA[longx].begin();
while (innerIter != mapA[longx].end())
{
if (innerIter->first == intx)
{
if (innerIter->second.size() == 0)
{
mapA[longx].erase(innerIter++);
}
break;
}
++innerIter;
}
Я написал этот код в C++, но я хочу использовать C++ 11. Можем ли мы написать это лучше в C++ 11?
Для второго сценария мне нужно снова повторить внешнюю карту и проверить ее элементы значений, или я могу сделать это в существующем коде?
Возможно, вам действительно нужно 'std :: multimap'? – Hcorg
Вы когда-нибудь удаляли более одного элемента из innerMap? Код кажется, что он только удаляет один элемент, я не совсем понимаю, зачем вам нужен цикл для этого. – bennofs
@Hcorg, это хороший момент, я изучу multimap для моих требований. – Nipun