十、关联容器
1. pair类型
定义在utility头文件中
初始化:
pair<T1, T2> p1
pair<T1, T2> p1(v1, v2)
make_pair(v1, v2)
操作:
p1.first p1.second
2. map类型
初始化:键类型必须支持 < 操作符
map<k, v> m
map<k, v> m(m2)
map<k, v> m(b, e)
类型:
map<k, v>::key_type
******::mapped_type
******::value_type 一个pair类型,键类型为const类型 ,如pair<const string, int>类型
map迭代器解引用产生pair类型对象
添加元素:(同set)
下标操作访问map
map::insert(e) e是m上的value_type类型,如果已经存在e.first,则不进行插入操作,返回值是一个pai类型对象,pair.first指向map中e.first迭代器,pair.second为bool,表示是否插入成功
map.insert(beg, end) 返回void
m.insert(iter, e) 返回迭代器
查找与读取:(同set)
map<stirng, int> word_count;
int occur = world_count["food"]; //如果map中不包含food,则插入food键,值为0
m.count(k) 返回键k的个数
m.find(k) 返回包含键的迭代器
multimap的查找,可以先用count计算数目,再用find读取迭代器,进而进行循环(同set)
也可以使用m.lower_bound(k) 与 m.upper_bound(k)来进行查找
更可以使用m.equal_range(k)来进行查找,返回一个pair,pair由两迭代器组成,分别是相关的第一个和最后一个迭代器
删除元素:(同set)
m.erase(k) 返回值size_type,表示删除的元素个数
m.erase(p) p为迭代器
m.erase(b, e)
迭代遍历:
迭代器指向的元素按键的升序排列
3. set类型
不能使用set的迭代器对set的值进行更改,因为set的值属于键值,与map类似,键值不允许修改。但可以进行删除。
set<int>::iterator ite = iset.find(1);
*ite = 10 ; // 错误! 是只读类型