std::map的遍历及删除

在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++);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值