STL笔记(5)-map/multimap

map是标准的关联式容器,一个map是一个键值对序列,即(key,value)对。它提供基于key的快速检索能力。

map中key值是唯一的。集合中的元素按一定的顺序排列。元素插入过程是按排列规则插入,所以不能指定插入位置。

map的具体实现采用红黑树变体的平衡二叉树的数据结构。在插入操作和删除操作上比vector快。

map可以直接存取key所对应的value,支持[]操作符,如map[key]=value。

multimap与map的区别:map支持唯一键值,每个键只能出现一次;而multimap中相同键可以出现多次。

multimap不支持[]操作符。


使用前准备:

#include <map>

using namespace std;


默认构造:

map<T1,T2> map TT;

multimap<T1,T2> multimap TT;


map的插入与迭代器:

三种方式:

1.通过pair的方式插入对象,例如:

map.insert(pair<int,string>(3,"小张“));

2.通过value_type的方式插入对象,例如:

map.insert(map<int,string>::value_type(1,"小李"));

3.通过数组方式插入值:

map[3]="小刘";

map[5]="小王";

第三种方式非常直观,但存在一个性能问题。插入3时,先在map中查找主键为3的项,若没发现,则将一个键为3,值为初始化值的对组插入到map中,然后再将值修改为"小刘"。若发现已存在这个键,则修改这个键对应的value。

前两种方式,采用的是insert()方法,该方法返回值为pair<iterator,bool>

pair<map<int,string>::iterator,bool> pairResult=mapStu.insert(pair<int,string>(3,"小张"));

如果插入成功,(pairResult.first)->first==3,(pairResult.first)->second=="小张",pairResult.second==true


map的插入与迭代器

map<T1,T2,less<T1>> mapA;

map<T1,T2,greater<T1>> mapB;

less与greater用法见set,less<T1>与greater<T1>可以替换成其他的函数对象functor


map的插入与迭代器

map.begin();

map.end();

map.rbegin();

map.rend();


map对象的拷贝构造与赋值

map(const map &mp);

map& operator=(const map &mp);

map.swap(mp);


map的大小

map.size();

map.empty();


map的删除

map.clear();//删除所有

map.erase(pos);//删除pos迭代器所指的元素,返回下一个元素的迭代器

map.erase(beg,end);删除区间[beg,end)的所有元素,返回下一个元素的迭代器

map.erase(keyElem);删除容器中key为keyElem的对组

map.equal_range(keyElem);//返回容器中key与keyElem相等的上下限的两个迭代器。上限是闭区间,下限是开区间,如[beg,end)。此函数返回两个迭代器,而这两个迭代器被封装在pair中。


map的查找

map.find(key);查找key是否存在,若存在,返回该键的元素的迭代器,若不存在,返回map.end();

map.count(keyElem);返回容器中key为keyElem的对组个数。对map来说,只能是0或1,对于multimap来说,值可能大于1。

map.lower_bound(keyElem);返回第一个key>=keyElem的元素的迭代器。

map.upper_bound(keyElem);返回第一个key>keyElem元素的迭代器




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值