STL set 基本介绍

 

1 关联容器

关联容器(associative container)是对容器概念的另外一个改进。关联容器将 关联在一起,并使用来查找值。

  • 对于容器X,表达式X::value_type 通常指出了存储在容器中的值类型。
  • 对于关联容器来说,表达式X::key_type 指出了键的类型。

优点——它提供了对元素的快速访问。与序列相似,关联容器也允许插入新元素,但不能指定元素的插入位置。原因是关联容器通常有用于确定数据放置位置的算法,以便能够快速检索信息。

原理——关联容器通常是使用某种树实现的。树是一种 数据结构,其根节点链接到一个或者两个节点,这些节点又链接到一个或两个节点,从而形成分支结构。就像链表一样,节点使得添加或者删除数据项比较简单,但是相对于链表,树的查找速度更快

分类——STL中 提供了4种关联容器:set、multiset、map和multimap。前两种是在头文件set(以前分别为set.h和multiset.h)中定义的,后两种是在头文件map(以前分别为map.h和multimap.h)中定义的。

最简单的关联容器就是set,其值类型与键相同,键是唯一的,这意味着集合中不会有多个相同的键。

  1. 确实对于set来说 ,值就是键。按关键字有序保存元素:set(关键字即值,即只保存关键字的容器);multiset(关键字可重复出现的set);
  2. multiset 类似于set,只是可能有多个值的键相同。例如,如果键和值的类型为Int,则multiset的对象包含的内容可以是1、2、2、2、3、5、7、7。
  3. 在map中,值与键的类型不同。键是唯一的,每个键只对应一个值。multimap与map相似,只是一个键可以和多个值相关联。

2  set基本介绍

set就是关键字的简单集合。当只是想知道一个值是否存在时,set是最有用的。

在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。set中元素的值不能直接被改变。set内部采用的是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树。

set具备的两个特点:

  1. set中的元素都是排序好的
  2. set中的元素都是唯一的,没有重复的

3 set中常用的方法

begin()        返回set容器的第一个元素

end()      返回set容器的最后一个元素

clear()          删除set容器中的所有的元素

empty()     判断set容器是否为空,如果集合为空,返回true

 

size()      返回当前set容器中的元素个数

max_size()    返回set容器可能包含的元素最大个数

count()            返回某个值元素的个数 (在set中不是0就是1)

insert()            在集合中插入元素

  • insert(a)
  • insert(begin,end)   将begin到end之间的元素插入set中

erase()            删除集合中的元素

  • erase(a)                删除键为a的元素
  • erase(begin,end) 删除begin到end之间的元素
  • erase(iterator)      删除迭代器所指向的元素


find()                     返回一个指向被查找到元素的迭代器
lower_bound(x)     返回指向大于(或等于)x
中最小的一个,并返回指向该元素的迭代器
upper_bound(x)    返回大于元素x中最小的一个,并返回指向该元素的迭代器

例如:

在set{3,5,7,8,13,16}中,

对于在set中存在的元素,比如8,

s.lower_bound(8)返回8所在位置的迭代器。

s.upper_bound(8)返回13所在位置的迭代器。

对于在set中不存在的元素,比如12,

两个函数返回的则都是13所在位置的迭代器。

特殊地,

对于比set中最大的元素大的元素,比如20,

两个函数返回的都是s.end()。

swap()                  交换两个集合变量

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值