在list内容中指定需要删除的key,在Map中找到并删除。最初做法如下:
std::map<std::string, Node>::iterator it_map,tmp;
std::string node_name;
std::vector<std::string>::iterator it_list;
for (it_map = node_map->begin(); it_map != node_map->end();it_map++)
{
node_name = it_map->first;
it_list = std::find(node_list.begin(), node_list.end(), node_name);
if (it_list != node_list.end())
{
node_map->erase(it_map);
}
}
问题来了,用到了erase函数,该函数将it_map置为end,我感觉应该在erase之前保存一下it_map,出现了下面这个操作:
std::map<std::string, Node>::iterator it_map,tmp;
std::string node_name;
std::vector<std::string>::iterator it_list;
for (it_map = node_map->begin(); it_map != node_map->end();)
{
node_name = it_map->first;
it_list = std::find(node_list.begin(), node_list.end(), node_name);
if (it_list != node_list.end())
{
tmp = ++it_map;
it_map--;
node_map->erase(it_map);
it_map = tmp;
}
else
{
it_map++;
}
}
代码是ok了,找了一下其它做法,就是将erase循环改成node_map->erase(it_map++);