返回介绍

G.4 set 和 map 的其他操作

发布于 2024-10-08 23:14:17 字数 4176 浏览 0 评论 0 收藏 0

关联容器(集合和映射是这种容器的模型)带有模板参数 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文