表10-1 关联容器类型 | |
map | 关联数组:元素通过键来存储和读取 |
set | 大小可变的集合,支持通过键实现的快速读取 |
multimap | 支持同一个键多次出现的map类型 |
multimap | 支持同一个键多次出现的set类型 |
表10-2 pair类型提供的操作 | |
pair<T1,T2> p1; | 创建一个空的pair对象,它的两个元素分别是T1和T2类型,采用值初始化 |
pair<T1,T2> p1(v1, v2); | 创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,而second成员初始化为v2 |
make_pair(v1, v2); | 以v1和v2值创建一个新的pair对象,其元素类型分别是v1和v2的类型 |
p1 < p2 | 两个pair对象之间的小雨运算,其定义遵循字典次序:如果p1.first<p2.first 或者 !(p2.first<p1.first)&&p1.seond<p2.second,则返回true |
p1 == p2 | 如果两个pair对象的first和second成员依次相等,则这两个对象相等。该运算使用其元素的==操作符 |
p.first | 返回p中名为first的公有数据成员 |
p.second | 返回p中名为second的公有数据成员 |
表10-3 map的构造函数 | |
map<k, v> m; | 创建一个名为m的空map对象,其键和值的类型分别为k和v |
map<k, v> m(m2); | 创建m2的副本m,m与m2必须有相同的键类型和值类型 |
map<k, v> m(b, e); | 创建map类型的对象m,存储迭代器b和e标记的范围内所有元素的副本。元素的类型必须能转换为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) | beg和end是标记元素范围的迭代器,其中的元素必须为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) | 返回m中k的出现次数 |
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中删除一段范围内的元素,该范围由迭代器对b和e标记。b和e必须标记m中的一段有效范围:即b和e都必须指向m中的元素或最后一个元素的下一位置。而且,b和e要么相等(此时删除的范围为空),要么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) |