std::map的遍历及删除

在list内容中指定需要删除的key,在Map中找到并删除。最初做法如下:

std::map::iterator it_map,tmp;
std::string node_name;
std::vector::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::iterator it_map,tmp;
std::string node_name;
std::vector::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++);

你可能感兴趣的:(std::map的遍历及删除)