- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
G.4 set 和 map 的其他操作
关联容器(集合和映射是这种容器的模型)带有模板参数 Key 和 Compare,这两个参数分别表示用来对内容进行排序的键类型和用于对键值进行比较的函数对象(被称为比较对象)。对于 set 和 multiset 容器,存储的键就是存储的值,因此键类型与值类型相同。对于 map 和 multimap 容器,存储的值(模板参数 T)与键类型(模板参数 Key)相关联,值类型为 pair<const Key, T>。关联容器有其他成员来描述这些特性,如表 G.9 所示。
表 G.9 为关联容器定义的类型
类 型 | 值 |
---|---|
X::key_type | Key,键类型 |
X::key_compare | Compare,默认为 less<key_type> |
X::value_compare | 二元谓词类型,与 set 和 multiset 的 key_compare 相同,为 map 或 multimap 容器中的 pair<const Key, T>值提供了排序功能 |
X::mapped_type | T,关联数据类型(仅限于 map 和 multimap) |
关联容器提供了表 G.10 列出的方法。通常,比较对象不要求键相同的值是相同的;等价键(equivalent key)意味着两个值(可能相同,也可能不同)的键相同。在该表中,X 为容器类,a 是类型为 X 的对象。如果 X 使用唯一键(即为 set 或 map),则 a_uniq 将是类型为 X 的对象。如果 x 使用多个键(即为 multiset 或 multimap),则 a_eq 将是类型为 X 的对象。和前面一样,i 和 j 也是指向 value_type 元素的输入迭代器,[i, j]是一个有效的区间,p 和 q2 是指向 a 的迭代器,q 和 q1 是指向 a 的可解除引用的迭代器,[q1, q2]是有效区间,t 是 X::value_type 值(可能是一对),k 是 X::key_type 值,而 il 是 initializer_list<value_type>对象。
表 G.10 为 set、multiset、map 和 multimap 定义的操作
操 作 | 描 述 |
---|---|
X(i, j, c) | 创建一个空容器,插入区间[i, j]中的元素,并将 c 用作比较对象 |
X a(i, j, c) | 创建一个名为 a 的空容器,插入区间[i, j]中的元素,并将 c 用作比较对象 |
X(i, j) | 创建一个空容器,插入区间[i, j]中的元素,并将 Compare( ) 用作比较对象 |
X a(i, j) | 创建一个名为 a 的空容器,插入区间[i, j]中的元素,并将 Compare( ) 用作比较对象 |
X(il); | 等价于 X(il.begin( ), il.end( )) |
a = il | 将区间[il.begin( ), il.end( )]的内容赋给 a |
a.key_comp( ) | 返回在构造 a 时使用的比较对象 |
a.value_comp( ) | 返回一个 value_compare 对象 |
续表
操 作 | 描 述 |
---|---|
a_uniq.insert(t) | 当且仅当 a 不包含具有相同键的值时,将 t 值插入到容器 a 中。该方法返回一个 pair<iterator, bool>值。如果进行了插入,则 bool 的值为 true,否则为 false。iterator 指向键与 t 相同的元素 |
a_eq.insert(t) | 插入 t 并返回一个指向其位置的迭代器 |
a.insert(p, t) | 将 p 作为 insert( ) 开始搜索的位置,将 t 插入。如果 a 是键唯一的容器,则当且仅当 a 不包含拥有相同键的元素时,才插入;否则,将进行插入。无论是否进行了插入,该方法都将返回一个迭代器,该迭代器指向拥有相同键的位置 |
a.insert(i, j) | 将区间[i, j]中的元素插入到 a 中 |
a.insert(il) | 将 initializer_list il 中的元素插入到 a 中 |
a_uniq.emplace(args) | 类似于 a_uniq.insert(t),但使用参数列表与参数包 args 的内容匹配的构造函数 |
a_eq.emplace(args) | 类似于 a_eq.insert(t),但使用参数列表与参数包 args 的内容匹配的构造函数 |
a.emplace_hint(args) | 类似于 a.insert(p, t),但使用参数列表与参数包 args 的内容匹配的构造函数 |
a.erase(k) | 删除 a 中键与 k 相同的所有元素,并返回删除的元素数目 |
a.erase(q) | 删除 q 指向的元素 |
a.erase(q1, q2) | 删除区间[q1, q2) 中的元素 |
a.clear( ) | 与 erase(a.begin( ), a.end( )) 等效 |
a.find(k) | 返回一个迭代器,该迭代器指向键与 k 相同的元素;如果没有找到这样的元素,则返回 a.end( ) |
a.count(k) | 返回键与 k 相同的元素的数量 |
a.lower_bound(k) | 返回一个迭代器,该迭代器指向第一个键不小于 k 的元素 |
a.upper_bound(k) | 返回一个迭代器,该迭代器指向第一个键大于 k 的元素 |
a.equal_range(k) | 返回第一个成员为 a.lower_bound(k),第二个成员为 a.upper_bound(k) 的值对 |
a.operator | 返回一个引用,该引用指向与键 k 关联的值(仅限于 map 容器) |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论