关联容器学习(multimap,multiset)

本文详细介绍了关联容器(map、set、multimap、multiset)与顺序容器的区别。关联容器通过键存储和读取元素,支持高效的查找操作。文章还阐述了如何在multimap和multiset中进行元素的查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关联容器(Associative Container)与顺序容器(Sequential Container)的本质区别在于:关联容器是通过键(key)存储和读取元素的,而顺序容器则通过元素在容器中的位置顺序存储和访问元素。

关联容器支持通过键值 来高效地查找和读取元素,两个基本的关联容器是map和set。map的元素是“键-值”对的二元组形式:键用作元素在map中的索引,而值 则表示所存储和读取的数据。set仅包含一个键,并有效地支持关于某个键是否存在的查询。set和map类型的对象所包含的元素都具有不同的键。如果需要一个键对应多个实例,则需要使用multimap或multiset类型。这两种类型允许多个元素拥有相同的键。

map关联数组:元素通过键来存储和读取
set大小可变的集合,支持通过键实现的快速读取
multimap支持同一个键多次出现的map类型
multiset支持同一个键多次出现的set类型

 map和set容器中,一个键只能对应一个实例。而multiset和multimap类型则允许一个键对应多个实例。

multimap不支持下标运算。

元素的添加与删除(insert,erase)
       由于键不要求是唯一的,因此每次调用insert总会添加一个元素。
       而带有一个键参数的erase将删除拥有该键的所有元素,并返回删除元素的个数;而带有一个或一对迭代器参数的erase版本只删除指定的元素,并返回void类型。

查找元素
    在map和set容器中,元素是有序存储的(升序),同样multimap和multiset也一样。因此,在multimap和multiset容器中,如果某个键对应多个实例,则这些实例在容器中将相邻存放,即迭代遍历时,可保证依次返回特定键所关联的所有元素。
    要查找特定键所有相关联的值,可以有下面三种方法:
    1)配合使用find和count来查找:count函数求出某键出现的次数,而find操作返回指向第一个键的实例的迭代器。
    2)使用lower_bound和upper_bound函数:这两个函数常用于multimap和multiset,但也可以用于map和set容器。所有这些操作都需要传递一个键,并返回一个迭代器。
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)
注意:形成的有效区间是[lower_bound(k), upper_bound(i)),是个半开半闭区间。
      lower_bound返回的迭代器不一定指向拥有特定键的元素。如果该键不在容器中,则lower_bound返回在保持容器元素顺序的前提下该键应被插入的第一个位置。
      若键不存在,返回的迭代器相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值