STL---map

一:map是关联式容器,它提供一对一的映射。存储的数据有两个部分,一个是关键字,一个是值,其中关键字只能出现一次,而不同的关键字,可以有相同的值。map中用pair来存储这两个值的。pair是stl定义的一种数据结构,后面会有简述。map内部自建一颗红黑树,所有map里面的数据都是有序的。 二:方法 1.构造函数,map有6个构造函数。但是我们通常用map m;这种方法来构造一个map实例。 2.数据插入,map通常用下面的三种方式插入数据。 1),用insert方法插入pair数据。 void main( VOID ) { map m; m.insert(pair ("sa",67)); m.insert(make_pair ("sd",565));//用make_pair方法(函数)产生pair对象。 map ::iterator it = m.begin(); while(it!=m.end()) { cout< first<<" "< second< m; m.insert(map ::value_type("sd",5)); map ::iterator it = m.begin(); while(it!=m.end()) { cout< first<<" "< second< :: value_type).name()来获得value_type的类型,得到类型为 struct std::pair ,class std::allocator > const ,int>说明是个struct pair类型的。 3,)通过重载[]来插入数据。 void main( VOID ) { map m; cout< ::value_type).name()< ::iterator it = m.begin(); while(it!=m.end()) { cout< first<<" "< second< ("ds",5)); m.insert(pair ("ds",15)); 当关键字相同的时候,不会改变他的值,也就是说在调用insert函数的时候,会检查,这个关键字是否存在了,如果存在,那么就不做任何操作。否则插入新的数据。 m["ds"] = 4; m["ds"] = 10; 这种方式插入数据是不会做检查的,会直接在那个点上写上关键字和值,也就是说。ds项的值将是10. 3,数据遍历。 stl里的容器的遍历都是通过迭代器来遍历的。即便是用数组的方式,也是通过迭代器。数据遍历也有三种法式,1,向前迭代器,2,用反向迭代器,3,数组,第一种方式前面也就有说明。下面讲第二第三种, 反向迭代器的方式。 void main( VOID ) { map m; m["ds"] = 4; m["as"] = 10; m.insert(pair ("cs",5)); m["bs"] = 123; map ::reverse_iterator rit = m.rbegin();//从后面开始。 while(rit!=m.rend()) { cout< first<<" "< second< m; m["ds"] = 4; m["as"] = 10; m.insert(pair ("cs",5)); m["bs"] = 123; map ::iterator it = m.begin(); for(int i=1;i<=m.size();i++) { cout< first]< struct pair { typedef Type1 first_type; typedef Type2 second_type Type1 first; Type2 second; pair( ); pair( const Type1& __Val1, const Type2& __Val2 ); template pair( const pair & _Right ); 与之相关的是make_pair函数。是个模板函数。 template pair make_pair( Type1 _Val1, Type2 _Val2 ); 三:关于map的迭代器, 对数据的插入,遍历,查找等操作,迭代器将不会失效,但是删除操作会失效。这与vector等序列式容器是不一样的。 三:效率 因为内部RB-TREE所以大多数的操作的时间复杂度都是O(logN),空间分析,在这些节点不保存数据的情况下就需要,左右孩子指针,指向父节点的指针,说明红黑的枚举值。 其他以后补充。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值