C++map删除多个元素的方法

21 篇文章 1 订阅
5 篇文章 1 订阅

比如<序号,姓名>的map。

typedef std::map<int , std::string> mapPeopleType;

现在要求序号取余2为0 的成员。



正确的方法:

#include <iostream>
#include <string>
#include <map>

typedef std::map<int , std::string> mapPeopleType;

void for_each(mapPeopleType &PeopleMap)
{
	mapPeopleType::iterator  itr = PeopleMap.begin();

	std::cout<< "for_each "<<std::endl;
	while(itr != PeopleMap.end())
	{
		std::cout<< " first "<< itr->first << " second "<<itr->second<<std::endl;
		itr++;
	}
	
}

void del(mapPeopleType &PeopleMap)
{
	mapPeopleType::iterator  itr;

	for(itr = PeopleMap.begin(); itr != PeopleMap.end(); )
	{
		
		if(itr->first % 2 == 0)
		{
			PeopleMap.erase(itr++);
		}
		else
		{
			++itr;
		}
	}

	return ;
}


int main()
{
	mapPeopleType PeopleMap;

	PeopleMap[1] = std::string("zhangsan");
	PeopleMap[2] = std::string("zhangsan2");
	PeopleMap[3] = std::string("zhangsan3");
	PeopleMap[4] = std::string("zhangsan4");
	PeopleMap[5] = std::string("zhangsan5");
	PeopleMap[6] = std::string("zhangsan6");
	PeopleMap[7] = std::string("zhangsan7");
	PeopleMap[8] = std::string("zhangsan8");

	//遍历
	for_each(PeopleMap);
	
	//删除

	del(PeopleMap);
	for_each(PeopleMap);

	//其他
	
	return 0;
}


root@ubuntu:/share# g++ New0003.cpp -g -o a.out
root@ubuntu:/share# ./a.out 
for_each 
 first 1 second zhangsan
 first 2 second zhangsan2
 first 3 second zhangsan3
 first 4 second zhangsan4
 first 5 second zhangsan5
 first 6 second zhangsan6
 first 7 second zhangsan7
 first 8 second zhangsan8
for_each 
 first 1 second zhangsan
 first 3 second zhangsan3
 first 5 second zhangsan5
 first 7 second zhangsan7
root@ubuntu:/share# 



记住,一定不要使用过期的迭代器。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值