关联容器的基本操作简单总结

C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。
这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有序的好处。
set&multiset
一,构建
  1. set<int>s_val;  
二,插入
  1. s_val.insert(val);返回值:pair<set<int>::iterator,bool>;bool标志是否成功,前一个表示插入位置。若里面已经有此元素,则返回原元素的位置。  
三,大小
s_val.size();元素的个数。
四,查找
  1. count(val): 返回容器中值等于val的元素数目。  
  2. find(val): 返回容器中值等于val的第一个元素的iterator位置;如果没有匹配元素,则返回end()位置。  
  3. lower_bound(val): 返回容器中第一个值大于或等于val的元素的iterator位置。  
  4. upper_bound(val): 返回容器中第一个值大于val的元素的iterator位置。  
  5. equal_range(val): 返回容器中值等于val的所有元素的范围[beg, end)组成的pair<beg, end>   
五,判空&清空
  1. s_val.clear()清空  
  2. s_val.empty()判空  
六,删除
  1. s_val.erase(val):删除容器中所有值为val的元素,返回删除元素的数目  
  2. s_val.erase(pos):删除位置为pos的元素。没有返回值。  
  3. s_val.erase(begin,end):删除范围内的所有元素。  
七,遍历
  1. set<int>::iterator iter;  
  2. iter=s_val.begin()第一个元素。  
  3. s_val.end()最后一个元素的下一个元素,  
  4. set<int>::reverse_iterator riterl;  
  5. riter=s_val.rbegin();最后一个元素。  
  6. s_val.rend(); 第一个元素的前一个元素。  

map&&multimap
一,map构造方法:
  1. map<int,string>map_ins;  
二,map的插入:
  1. 1,insert()返回值:pair<set<int>::iterator,bool>;bool标志是否成功,前一个表示插入位置。若里面已经有此元素,则返回原元素的位置。  
  2. pair<int,string>p(v1,v2);  
  3. map_ins.insert(p);  
  4. while()  
  5. {  
  6. map_ins.insert(make_pair(v1,v2));  
  7. }  
  8. 2,map_ins.inser(map<int,string>::value_type(v1,v2))  
  9. 3,map_ins[1]="fdaslj";  
三,map的大小
  1. int nsize=map_ins.size();  
四,数据的查找
  1. 1,用count函数来判定关键字是否出现,其缺点是无法定位数据位置,只有0和1  
  2. 2,用find(第一个val)函数,如果有要找的数据则返回其元素的位置,否则返回end。  
  3. 3,lower_bound(val),第一个返回容器中第一个key值大于或者小于val的元素的位置  
  4.    upper_bound(val)返回第一个key值大于val的元素的iterator的位置  
  5. 4,equel_range(val):返回容器中等于val的所有元素的范围[beg, end)组成的pair<beg, end>;  
五,数据的清空和判空;
  1. clear()清空,empty()判空。  
六,数据的删除
  1. map_ins.erase(val):删除容器中所有key值为val的元素,成功返回删除元素的数目,否则0;  
  2. map_ins.erase(pos):删除位置为pos的元素。没有返回值。  
  3. map_ins.erase(begin,end):删除范围内的所有元素。  
七,数据的遍历
  1. map<int,string>::interator iter;  
  2. for(iter=map_ins.begin();iter!=map_ins.end();iter++)  
  3.   iter->second;  
  4. 或者从后往前:  
  5. map<int,string>::reverse_interator riter;  
  6. rter.rbegin,容器中的最后一个元素。  
  7. rter.end,容器中的第一个元素的前一个元素。 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值