C++ 学习系列之 容器(一)map

一、map应用场景


在很多地方,我们需要用到按值存储;与之相对的概念是按照索引来存储。比如,我们需要存一个数组,表示365天中每天的收入情况,此时我们肯定会选择数组或者vector结构,这种按照索引存储的概念是最直接的。但是,有时候会存在另外一种情况,有N个人,每个人都对应有一定的收入,我们需要将这些人和他们的收入存储起来,此时如果我们直接将人和收入作为一个结构体来存储,采用数组模式,当我们在检索的时候不得不遍历整个链表来实现。通过C++ STL自带的map结构,我们可以实现按照值存储,使用key-value模式,就可以直接用key来检索对应的value了。


二、map常用操作


2.1map的定义

map<key_type, myvalue_type> mymap;


2.2map的插入

map的插入有两种模式:

方法一:mymap[key1]=value1;这种模式简单方便,但是有弊端:这个插入的过程是先寻找key1是否存在,如果不存在,插入这个对象并进行初始化,然后再将value1赋值给这个对象。

方法二:mymap.insert(map<key_type,myvalue_type>:: value_type(key1, value1))


2.3map的查找


获得一个key对应value的最简单方法是value=mymap[key1];但是此处有陷阱:如果mymap中不含有key1,那么将自动插入key1,然后返回初始化的值,这显然不是我们想要的结果。


这里,我们采用find方法:具体情况如下 :

map<key_type, myvalue_type>::iterator itp;

itp=mymap.find(key1);

if(itp!=mymap.find()){

   key=itp->first;

   value=itp->second;

}


2.4map的删除

iterator erase(iterator it); //通过一个条目对象删除

iterator erase(iterator first, iterator last);        //删除一个范围

size_type erase(const Key&amp; key); //通过关键字删除


2.5map的属性

map常用的两个属性方法是empty和size。


三、map的实现方式


四、使用map的注意事项

1.map是一种有序的组织结构,所以在查找的时候能够实现log(N)的复杂度,所以,对key_type的比较就显得比较重要了。所以,如果我们需要用的keytype不是内建的数据类型,那么我们需要自己来定义比较函数。例如,采用Point作为key_value的情况如下:

struct Point{
    bool operator <(const Point &pt) const{
         return (x<pt.x || (x==pt.x && y<pt.y));
    }

    int x;

    int y;

}


2.map中的变量类型__pair

map中的变量是key_value模式,实际上是一个pair类型。我们再插入map元素的时候,可以这样写

mymap.insert(make_pair(mykey, myvalue));

或者mymap.insert(pair<key_type, value_type>(mykey, myvalue));


make_pair与pair的区别在于,前者会进行隐式的类型转换。

注意:map包含在头文件utility之中


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值