C++ primer 4th 第10章《关联容器》总结

10-1 关联容器类型

map

关联数组:元素通过键来存储和读取

set

大小可变的集合,支持通过键实现的快速读取

multimap

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

multimap

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

 

10-2 pair类型提供的操作

pair<T1,T2> p1;

创建一个空的pair对象,它的两个元素分别是T1T2类型,采用值初始化

pair<T1,T2> p1(v1, v2);

创建一个pair对象,它的两个元素分别是T1T2类型,其中first成员初始化为v1,而second成员初始化为v2

make_pair(v1, v2);

v1v2值创建一个新的pair对象,其元素类型分别是v1v2的类型

p1 < p2

两个pair对象之间的小雨运算,其定义遵循字典次序:如果p1.first<p2.first 或者 (p2.first<p1.first)&&p1.seond<p2.second,则返回true

p1 == p2

如果两个pair对象的firstsecond成员依次相等,则这两个对象相等。该运算使用其元素的==操作符

p.first

返回p中名为first的公有数据成员

p.second

返回p中名为second的公有数据成员

 

10-3 map的构造函数

map<k, v> m;

创建一个名为m的空map对象,其键和值的类型分别为kv

map<k, v> m(m2);

创建m2的副本mmm2必须有相同的键类型和值类型

map<k, v> m(b, e);

创建map类型的对象m,存储迭代器be标记的范围内所有元素的副本。元素的类型必须能转换为pair<const k, v>

注:对于键类型,唯一的约束就是必须支持 < 操作符

 

10-4 map类定义的类型

map<K, V>::key_type

map容器中,用做索引的键的类型

map<K, V>::mapped_type

map容器中,键所关联的值的类型

map<K, V>::value_type

一个pair类型,它的first元素具有const map<K, V>::key_type类型,而second元素则为map<K, V>::mapped_type类型

注:map迭代器进行解引用将产生pair类型的对象

 

10-5 map容器提供的insert操作

m.insert( e )

e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则插入一个值为e.second的元素;如果该键在m中已存在,则保持m不变。该函数返回一个pair类型对象,包含指向键为e.first的元素的map迭代器,以及一个bool类型的对象,表示是否插入了该元素

m.insert(beg, end)

begend是标记元素范围的迭代器,其中的元素必须为m.value_type类型的键-值对。对于该范围内的所有元素,如果它的键在m中不存在,则将该键及其关联的值插入到m。返回void类型

m.insert(iter, e)

e是一个用在m上的value_type类型的值。如果键(e.first)不在m中,则创建新元素,并以迭代器iter为起点搜索新元素存储的位置。返回一个迭代器,指向m中具有给定键的元素

 

10-6 不修改map对象的查询操作

m.count(k)

返回mk的出现次数

m.find(k)

如果m容器中存在按k索引的元素,则返回指向该元素的迭代器。如果不存在,则返回超出末端迭代器

注:使用count检查map对象中某键是否存在,如果存在,可用下标操作访问该元素,实际上这指向了两次查找。如果希望存在该元素就访问,可用find

 

10-7 map对象中删除元素

m.erase(k)

删除m中键为k的元素。返回size_type类型的值,表示删除的元素个数

m.erase(p)

m中删除迭代器p所指向的元素。p必须指向m中确实存在的元素,而且不能等于m.end()。返回void类型

m.erase(b, e)

m中删除一段范围内的元素,该范围由迭代器对be标记。be必须标记m中的一段有效范围:即be都必须指向m中的元素或最后一个元素的下一位置。而且,be要么相等(此时删除的范围为空),要么b所指向的元素必须出现在e所指向的元素之前。返回void类型

 

10-8 返回迭代器的关联容器操作

m.lower_bound(k)

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

m.upper_bound(k)

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

m.equal_range(k)

返回一个迭代器的pair对象

它的first成员等价于m.lower_bound(k)。而second成员则等价于m.upper_bound(k)

 

你可能感兴趣的:(Prim)