stl__关联容器

                                                       关联容器

 

 

简介

对于关联容器,它的每个元素都有一个键(key),容器中的元素的顺序并不能人为随意决定,而是按照键的取值升序排列的。也就是说,对于一个关联容器s,使用迭代器在 [s.begin(),s.end() )区间内遍历,访问到的序列总是升序的。

 

分类

按照容器中是否允许出现重复键值,关联容器可分为单重关联容器和多重关联容器,单重关联容器中的键值是唯一的,不允许重复,集合和映射属于这一类;多重关联容器中,相同的键值允许重复出现,多重集合和多重映射属于这一类。按照键与元素的关系可以分为简单关联容器和二元关联容器。简单关联容器以元素本身作为键,集合和多重集合属于这一类;二元关联容器的元素是由键和某种类型的附加数据共同构成,键只是元素的一部分,映射和多重映射属于这一类

4种关联容器的分类
类型简单管理容器二元关联容器
单重关联容器集合(set)映射(map)
多重关联容器多重集合(multiset)多重映射(multimap)

二元组pair

二元关联容器的元素类型是键类型和附加数据类型的组合,这种组合类型可以用一个二元组(pair)来表示,pair是<utility>头文件中定义的结构体模板:

template<class T1,class T2>

struct pair{

     T1 first;  //二元组的第一元

     T2 second;  //二元组的第二元

     pari();    //默认构造函数

     pair(const T1 &x,const T2 &y);     //构造first=x,second=y的二元组

     template<class U,class V>pair(const pair<U,V>&p);  //复制构造函数

};

 

关联容器的共性

假设S表示容器的类型,s表示S类型的实例,用T表示S容器的元素类型,用t表示T类型的一个实例,用K表示S容器的键的类型,用k表示K的一个实例,用n表示一个整型数据,用p1和p2表示指向s中的元素的迭代器,用q1,q2表示任何一个指向T类型元素的输入迭代器,关联容器的基本功能如下所示:

1.关联容器之构造函数
操作功能单重关联容器多重关联容器
S s构造一个空容器构造一个空容器构造一个空容器
S s(q1,q2)将 [q1,q2)区间的数据作为s的元素构造s当[q1,q2)范围内出现具有相同键的元素时,只有一个元素会被加入s中[q1,q2)范围内的所有元素均被无条件加入s中

 

2.关联容器之元素的插入
操作功能单重关联容器多重关联容器
s.insert(t)将元素t插入s容器中只有当不存在相同键的元素时才能成功插入,该函数返回类型为pair<S::iterator,bool>。插入成功时,返回被插入元素的迭代器,否则返回与t的键相同的元素的迭代器和false插入总会成功,返回已插入元素的迭代器
s.insert(p1,t)将元素t插入s容器中,p1是一个提示的插入位置,如果提示位置准确(即t的键的大小刚好在p1-1和p1之间)则可以提高插入效率。即使提示位置不准确也可以正确完成插入操作,该函数总是返回一个迭代器只有当不存在相同键的元素时才能成功插入,插入成功时,返回被插入元素的迭代器,否则返回与t的键相同的元素的迭代器插入总会成功,返回已插入元素的迭代器
s.insert(q1,q2)相当于按顺序对 [q1,q2) 区间内的每个元素x分别执行s.insert(x)

 

3.关联容器之元素的删除
s.erase(p1)删除p1所指向的元素
s.erase(p1,p2)删除 [p1,p2) 区间内的元素
s.erase(k)删除所有键为k的元素,返回被删除元素的个数

 

4.关联容器之键的查找和计数
s.find(k)找到任意一个键为k的元素,返回该元素的迭代器,如果s中没有键为k的元素,则返回s.end()
s.lower_bound(k)得到s中第一个键值不小于k的元素的迭代器    (第一个>=k的元素)
s.upper_bound(k)得到s中第一个键值大于k的元素的迭代器    (第一个>k的元素)
s.equal_range(k)得到一个用pair<S::iterator,S::iterator>表示的区间,记为 [p1,p2) 。该区间刚好包含所有键值为k的元素,p1==s.lower_bound(k)和p2==s.upper_bound(k)一定成立
s.count(k)得到s容器中键为k的元素个数

注:关联容器的插入和删除操作不会使任何已有的迭代器、指针或引用失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值