set容器

set容器

set是STL中一种标准关联容器(vector,list,string,deque都是序列容器,而set,multiset,map,multimap是标准关联容器),它底层使用平衡的搜索树————红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference),并(set_union),对称差(set_symmetric_difference)等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。

set和multiset使用时需要引用头文件"#include<set>"。

(1)不能直接改变元素值,因为那样会打乱原本正确的顺序,要改变元素值必须先删除旧元素,再插入新元素。
(2)不提供直接存取元素的任何操作函数,只能通过迭代器进行间接存取,而且从迭代器角度来看,元素值是常数。
(3)元素比较只能用于型别相同的容器(即元素和排序准则必须相同)。

set的各成员函数列表如下:

定义一个int 型集合对象s:set<int>  s;           成员函数  s.xxx


begin()-----------返回指向第一个元素的迭代器


clear()-------------清除所有元素


count()-------------返回某个值元素的个数


empty()-------------如果集合为空,返回true


end()-----------------返回指向最后一个元素的迭代器


equal_range()-----返回集合中与给定值相等的上下限的两个迭代器


erase()---------------删除集合中的元素


find()------------------返回一个指向被查找到元素的迭代器


get_allocator()------返回集合的分配器


insert()----------------在集合中插入元素


lower_bound()------返回指向大于(或等于)某值的第一个元素的迭代器


key_comp()----------返回一个用于元素间值比较的函数


max_size()------------返回集合能容纳的元素的最大限值


rbegin()----------------返回指向集合中最后一个元素的反向迭代器


rend()-------------------返回指向集合中第一个元素的反向迭代器


size()--------------------集合中元素的数目


swap()------------------交换两个集合变量


upper_bound()-------返回大于某个值元素的迭代器


value_comp()---------返回一个用于比较元素间的值的函数


multiset多重集合容器是一个可容纳重复元素键值的有序关联容器。与set容器一样,使用红黑树作为容器的内部数据结构,元素的搜索操作都是具有对数级的算法时间复杂度。它的find和equal_range函数,可搜索出某一键值下的所有元素位置。

缺点:和set一样,如果插入、删除操作频繁了,就不合适了。

优点:相对于set,它能插入重复的元素。当然,它的检索速度也是非常快的。



迭代器:

迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。

迭代器是一种检查容器内元素并遍历元素的数据类型。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值