如何擦除内部地图的键,然后在 C++ 中擦除外部地图元素
How to erase the inner map's key and then erase outer map element in C++
我有一张这样的地图:
std::map<int, std::map<float, char>> m;
在此我需要删除内部映射的键,它是一个浮点值。擦除后,如果内部地图为空,则也从外部地图中删除该元素。
一个例子。
std::map<int, std::map<float, char>> m;
std::map<float, char> m1;
m1[2.5] = 'c';
m[5] = m1;
要从内部地图中删除的键是 2.5
。从内映射中擦除此密钥后,它变为空。
现在外层映射需要在每次擦除后检查如果内层映射为空则也从外层循环中擦除元素。
现在必须先擦除内部映射中的密钥 2.5
。
正如你在评论中所说,你只知道内部映射中的键(为什么你不知道外部映射中的键?),在这种情况下你别无选择,只能迭代整个外部映射直到您找到一个元素,其内部映射包含该键。然后你就会知道你可以擦除哪个外部元素。例如:
std::map<int, std::map<float, char>> m;
m[5][2.5] = 'c';
...
for(auto m_iter = m.begin(); m_iter != m.end(); ++m_iter)
{
auto &m2 = m_iter->second;
auto m2_iter = m2.find(2.5);
if (m2_iter != m2.end())
{
m2.erase(m2_iter);
if (m2.empty())
m.erase(m_iter);
break;
}
}
我有一张这样的地图:
std::map<int, std::map<float, char>> m;
在此我需要删除内部映射的键,它是一个浮点值。擦除后,如果内部地图为空,则也从外部地图中删除该元素。
一个例子。
std::map<int, std::map<float, char>> m;
std::map<float, char> m1;
m1[2.5] = 'c';
m[5] = m1;
要从内部地图中删除的键是 2.5
。从内映射中擦除此密钥后,它变为空。
现在外层映射需要在每次擦除后检查如果内层映射为空则也从外层循环中擦除元素。
现在必须先擦除内部映射中的密钥 2.5
。
正如你在评论中所说,你只知道内部映射中的键(为什么你不知道外部映射中的键?),在这种情况下你别无选择,只能迭代整个外部映射直到您找到一个元素,其内部映射包含该键。然后你就会知道你可以擦除哪个外部元素。例如:
std::map<int, std::map<float, char>> m;
m[5][2.5] = 'c';
...
for(auto m_iter = m.begin(); m_iter != m.end(); ++m_iter)
{
auto &m2 = m_iter->second;
auto m2_iter = m2.find(2.5);
if (m2_iter != m2.end())
{
m2.erase(m2_iter);
if (m2.empty())
m.erase(m_iter);
break;
}
}