【C++ Primer】关联容器

十、关联容器

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 ; // 错误! 是只读类型

你可能感兴趣的:(【C++ Primer】关联容器)