学习笔记 STL Map

Map 的数据结构其实是一种平衡二叉树 (红黑树)。

因此其内部并不是一块内存,而是不同的节点。所以当我们做插入,删除时,只是改变节点。因此速度会很快。


参考:http://blog.csdn.net/sauphy/article/details/52089245

http://www.cnblogs.com/fly1988happy/archive/2012/03/06/2381559.html


注意在一个迭代中,不能直接删除map

#include "stdafx.h"
#include <string>
#include <map>
#include <iostream> 
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	map<string,int> my_Map;
	//typedef map<string,int> MY_MAP;
	//MY_MAP my_Map2;

	my_Map["a"] = 1;
	my_Map.insert(map<string,int>::value_type("b",2));
	my_Map.insert(pair<string,int>("c",3));
	my_Map.insert(make_pair<string,int>("d",4));

	string strErase = "";
	map<string,int>::iterator my_Iter;
	//方法一
	//在一个迭代周期中,map成员不能被删除
	//只能记录位置,再迭代完成后再删除

	for (my_Iter = my_Map.begin(); my_Iter != my_Map.end();++my_Iter)
	{

		cout<<my_Iter->first<<" = "<<my_Iter->second<<endl;

		if (3 == my_Iter->second)
		{
			strErase = my_Iter->first;
		}

	}

	my_Map.erase(strErase);

	for (my_Iter = my_Map.begin(); my_Iter != my_Map.end();++my_Iter)
	{

		cout<<my_Iter->first<<" = "<<my_Iter->second<<endl;

	}


	//方法二
	//请在使用方法二时,注释所有方法一的代码
	
	my_Iter = my_Map.begin();
	while(my_Iter != my_Map.end())
	{
		if (3 == my_Iter->second)
		{
			string strErasetemp = my_Iter->first;
			my_Iter++;
			my_Map.erase(strErasetemp);
		}else{
			my_Iter++;
		}
	}

	for (my_Iter = my_Map.begin(); my_Iter != my_Map.end();++my_Iter)
	{

		cout<<my_Iter->first<<" = "<<my_Iter->second<<endl;

	}


	system("PAUSE");

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值