关联容器

一、关联容器的类型

map  关联数组:元素通过键来存储和读取采用键-值的存储方式,键是唯一的 不能重复

set  大小可变的集合,只存储键(唯一),支持通过键的快速读取,不能修改已有的键值

multimap 支持同一个键出现多次的map 类型

multiset 支持同一个键出现多次的set 类型

 

顺序容器键值的要求,键所使用的类型必须定义了<操作符

二、pair类型简介(头文件utility中定义)

pair<T1,T2> p1;

make_pair(v1,v2) 以v1,v2值创建一个新的pair对象,返回一个pair类型

三、关联容器的操作

关联容器的操作大多数和顺序容器共享,但也存在区别:

关联容器不提供push_front,push_back,front,back,pop_front,pop_back操作

不能通过容器大小来定义关联容器,不支持assign,resize操作

四、map类型

1、 map类定义的类型

map<k,v>::key_type 键的类型

map<k,v>::mapped_type 值的类型

map<k,v>::value_type pair类型,<first,second>first元素的类型是:constmap<k,v>::key_type

                                             second元素的类型是:map<k,v>::mapped_type

注意的是 键成员不能修改(const),只能修改值成员

2、 给map添加元素的方法

方法一:下标法

word_cout["Anna"];(使用下标法时,当不存在该键时将在map中添加新元素)返回为该键对应的值

方法二:map::insert使用

m.insert(e);e为value_type类型,插入时查找m中是否含有e.first的键,若已存在,则不采取任何操作;若不存在,则插入。

返回值:pair<map<T1,T2>::iterator,bool>,

bool值由插入是否成功决定:若e.first的键不存在,返回true(插入成功);若e.first的键已存在,返回false(插入失败);

3、 查找并读取map中的元素

可以使用下标法:intvalue=word_count["Anna"];但这种做法的缺点是,如果查找的键不存在就会无端的在map中插入新元素

故一般采用map::count(k)和map::find(k)

map::count(k)返回k出现的次数,在map中只能是0或1;

map::find(k)返回指向该元素的迭代器,或不存在返回指向末端的迭代器

4.删除map中的元素

m.erase(k),返回删除元素的个数,类型为size_type,在map中返回值只能是0或者1

m.erase(p),返回void,p为一迭代器

m.erase(b,e),返回void,删除一段元素

五、 set类型

set容器只是单纯的键的集合,几乎支持所有的map操作,除了下标操作,因为没有mapped_type类型,value_type不再是pair类型。

需要注意的是,set容器适合存储不需要修改的元素,因为只提供读操作和插入操作,不提供修改操作

六、multiset/multimap类型(分别包含于<set><map>头文件中)

 multiset/multimap查找元素的三种方法

方法一:使用count(k)+find(k)

例:输出所有键为K所对应的值

//multimap<t1,t2> mmp

int count=mmp1.count(k);

map<t1,t2>::iteratoriter=map1.find(k);

for(i=0;i<count;i++)

{

        cout<<*iter;

        iter++;

}

cout<<endl;

 方法二:使用upper_bound(k),lower_bound(k)

upper_bound(k),返回一个迭代器,指向键不小于k的第一个元素

lower_bound(k),返回一个迭代器,指向键大于k的第一个元素

例:输出所有键为K所对应的值

//multimap<t1,t2> mmp

typedef multimap<t1,t2>::iteratorm_it;

m_it begin=mmp.lower_bound(k);

m_it end=mmp.upper_bound(k);

for(;begin!=end;begin++)

{

  cout<<begin->second;

}

cout<<end;

方法三:使用equal_bound(k)

upper_bound(k),返回一个pair对象,它的first是upper_bound(k)返回的迭代器,second是lower_bound(k)返回的迭代器,具体实例可参照方法二。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值