一、关联容器的类型
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
注意的是 键成员不能修改(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>头文件中)
方法一:使用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<<endl;
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<<end;
方法三:使用equal_bound(k)
upper_bound(k),返回一个pair对象,它的first是upper_bound(k)返回的迭代器,second是lower_bound(k)返回的迭代器,具体实例可参照方法二。