STL中map容器的操作

         MAP是SLT中的一个容器,是关联式容器。它提供一对一的数据处理能力,其中第一个数据称为关键字,每个关键字只能在map中出现一次,第二个数据代表关键字的值。主要针对的是处理一对一的数据,MAP内部是自建一棵红黑树(一种非严格意义上的平衡二叉树),具有数据自动排序功能,所以MAP内部所有数据是有顺序的,基本是从小到大。

      MAP的默认构造函数:


Map(const map& m);拷贝构造函数
Map(iterator begin,iterator end)区间构造函数
Map(iterator begin,iterator end,const traits& _compare)带比较谓词的构造函数
Map(iterator begin,iterator end,const traits& _compare,const allocator& all)带分配器

我们经常用的是前两种,Map的基础函数有:begin,end,rbegin,rend,clear,empty,size,max_size。这些函数都是可以直接应用的。

既然说到MAP容器,和其他容器一样都要从初始化开始。

建立MAP对象

map<int,string>  mapTest;

初始化insert和数组直接赋值:

Map的默认构造函数

一、	insert(pair(1,“Thisisatest”))
二、	insert(make_pair(2,“test”))
三、	insert(map<int ,string>::value_type(3,”student”))
前三种如果出现关键字一样的情况,就不会插入。
四、	直接用insert(pair(array[i],str[i]))
这种数组的方式,出现关键字一样的情况,就好覆盖前一个。
tTestMap TestMap[4]  =  { { 10, "nihao" },
	                 { 200, "woshishui" },
	                 { 30, "thisa" },
                          { 400, "test" }
		      };
	map<string,tTestMap>  TempMap;
	string strTest[4] = {"1st","2nd","3rd","4th"};
	for (int i = 0; i < 4; ++i)
	{
	    TempMap.insert(make_pair(strTest[i],TestMap[i]));
	}
	
	map<string,tTestMap>::iterator TestIt;
	for (TestIt = TempMap.begin(); TestIt != TempMap.end(); ++TestIt)
	{
	    printf("%s,%d,%s\n",TestIt->first.c_str(),TestIt->second.nData,TestIt->second.szData);
	}

MAP容器的遍历主要是应用迭代器,Iterator上例中已经涉及,初始化后,不符合要求的就要删除,就涉及到erase函数。

如果知道关键字可以直接删除,如果不知道关键字,或者只知道条件,就需要用迭代器,遍历然后把数据删除。

map<string,tTestMap>::iterator TestIt;
int nData = 0;
for (TestIt = TempMap.begin(); TestIt != TempMap.end(); ++TestIt)
{
    if (TestIt->second.nData > 100)
    {
        nData = TempMap.erase(TestIt->first);
        TestIt = TempMap.begin();//可能时间效率上要低,需要不断的从新开始遍历。
    }
}

下一个涉及到的函数是查找,find和count函数从名字的意义上就可以看出,一个是找,一个是数,找的可以直接查找到该关键字,并且返回的是迭代器,就是关键字的位置。

由于map的定义要求,count返回的是0或1,只能告诉你发现还是未发现。

Map容器的初始化应用也可以应用operator=(const map& m)

map<string,tTestMap> mapHelp;
	mapHelp = TempMap;
	map<string,tTestMap>::iterator mapHelpIt = mapHelp.begin();
	for (;mapHelpIt != mapHelp.end();++mapHelpIt)
	{
		printf("%s ,%d , %s \n",mapHelpIt->first.c_str(),mapHelpIt->second.nData,mapHelpIt->second.szData);
	}
	 

MAP容器的内部构造:

成员函数


迭代器:


容器(Capacity:


元素访问:


修改容器操作:


观察者(Observers:


操作:


分配器:

最后再涉及一个reverse_iterator 翻转迭代指针。

map<string,tTestMap>::reverse_iterator rTestIt = TempMap.rbegin();
for (; rTestIt != TempMap.rend(); ++ rTestIt)
{
     printf("%s,%d,%s\n",rTestIt->first.c_str(),rTestIt->second.nData,rTestIt->second.szData);
}




 



 



 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值