c++中set的介绍及用法
set
的简单介绍
set关联式容器;set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。set的内部采用的是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。
- set的插入和删除效率非常高,因为set内部采用链表结构,插入以及删除只需要修改指针,不涉及内存的操作;
- 当数据元素增多时,set的插入和搜索速度变化不大,在set中查找是使用二分查找,也就是说,如果有16个元素,最多需要比较4次就能找到结果,有32个元素,最多比较5次。其时间复杂度为 log 2 n \log_2n log2n。
set
中常用的方法
begin()
; 返回set容器的第一个元素,其中反向遍历用rbegin()
end()
; 返回set容器的最后一个元素,其中反向遍历用rend()
clear()
; 删除set容器中的所有的元素empty()
; 判断set容器是否为空max_size()
; 返回set容器可能包含的元素最大个数size()
; 返回当前set容器中的元素个数
Tip: 需要注意的是begin()
和end()
函数是不检查set
是否为空的,使用前最好使用empty()
检验一下set
是否为空.count()
; 用来查找set中某个某个键值出现的次数。这个函数在set并不是很实用,因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了。erase(iterator)
; 删除定位器iterator指向的值erase(first,second)
; 删除定位器first和second之间的值erase(key_value)
; 删除键值key_value的值insert(key_value)
; 插入元素
常用操作代码
- 插入元素
set<int> s; for(int i=1; i<=10; i++){s.insert(i); }
- 正向遍历
for(set<int>::iterator it=s.begin(); it!=s.end(); it++){cout<<*it<<endl; }
- 反向遍历
for(set<int>::reverse_iterator it=s.rbegin(); it!=s.rend(); it++){cout<<*it<<endl; }
- 删除元素
s.erase(5); //删除值为5的元素 s.erase(s.begin()); //删除第一个元素 s.erase(s.end()); //删除最后一个元素 s.erase(first_iterator,second_iterator); //删除两个迭代器之间的值 //例如 s.erase(s.begin(), s.end()); //删除所有元素
- 元素检索:
set<int> s; for(int i=1; i<=10; i++){s.insert(i); } cout<<*s.find(5)<<endl; // 注意返回的并不是下标,因为没有set不是数组,返回的是迭代器,及对应值为value的指针
c++中set的介绍及用法相关推荐
- Java中BigDecimal类介绍及用法
Java中BigDecimal类介绍及用法 Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高 ...
- Python中函数的介绍以及用法
1.函数的介绍 在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数 定义函数的规则: 函数代码块以 def 关键词开头,后接函 ...
- HT for Web 中Painter的介绍及用法
鉴于许多同学对Painter不熟悉,所以撰写此文介绍下.Painter的中文意思是画家.漆工,那放到HT里是什么意思呢?很简单,这是HT特有的一种接口,允许开发者在拓扑及其它通用组件上使用Canvas ...
- java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测)
Java中提供了大数字(超过16位有效位)的操作类,即 java.math.BinInteger 类和 java.math.BigDecimal 类,用于高精度计算. 其中 BigInteger 类是 ...
- php中headers,php中get_headers()函数介绍以及用法
get_headers()是PHP中一个系统级函数,他可以返回一个包含有服务器响应一个HTTP请求所发送的标头的数组.如果失败则返回 FALSE 并发出一条 E_WARNING 级别的错误信息(可用来 ...
- CSS中background-attachment的介绍和用法
background-attachment可以设置在网页滚动时背景图片是否随着网页一起滚动,当一个盒子的高度足够大时,网页会产生滚动条,此时可以使用background-attachment属性来设置 ...
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- python数组用sum求和_对python中array.sum(axis=?)的用法介绍
根据代码中运行的结果来看,主要由以下几种: 1. sum():将array中每个元素相加的结果 2. axis对应的是维度的相加. 比如: 1.axis=0时,对饮搞得是第一个维度元素的相加, [[0 ...
- python or的用法_详细介绍Python中and和or实际用法
and 和 or 的特殊性质 在Python 中,and 和 or 执行布尔逻辑演算,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一.下面来看一下实例.>>> 'a' a ...
最新文章
- Modelsim+Debussy联合使用
- 最短路径(floyed)
- startActivityForResult()
- 经典C语言程序100例之九七
- 【附全部代码+图片】使用HTML5+CSS3绘制HTML5的logo——Web前端系列学习笔记
- 操纵浏览器历史记录 : popstate() 、 history.pushState() 、 window.history.pushState()
- android jni c调用java,Android学习JNI,使用C调用JAVA语言
- Java体系学习书籍推荐,BAT 面试官 如何面试
- AcWing 1057. 股票买卖 IV
- [CF1073E]Segment Sum
- ArcGIS Pro中的回归分析浅析(下)地理加权回归工具(GWR)使用小结
- 12.接口测试报告包含哪些内容
- ds18b20驱动程序Linux,ARM-linux嵌入式内核驱动——DS18B20的驱动
- php css抽离,webpack4 单独抽离打包 css 的新实现
- 庐陵文化(作者:王剑冰,河南省作协副主席)
- 程序员必修课-颈椎问题的预防
- prometheus-community-PushProx介绍
- 嵌入式课程学习 嵌入式硬件工程师需要学习哪些内容?
- 如何搭积木式的快速开发H5页面?
- 杭电2017单人排位赛2-B魔法宝石
热门文章
- 哥几个最近的现状,酒后吐真言
- uefi里面device path 是什么 ? 长什么样
- CT 系统参数标定及反投影重建成像-2017数模国赛论文A298编程分析
- 黄金含量版本——KTV
- Kubernetes-Ubuntu虚拟机安装kubectl,kubeadm,kubelet
- new thread java_谈谈new Thread的弊端及Java四种线程池的使用
- 软件测试专业毕业工资,学习软件测试就业工资大概多少?
- python学习——requests模块
- 微软模拟飞行2020服务器连不上打不开,X-Plane 10 Flight Simulator无法连接服务器如何解决...
- altium中错误报告类型_Python 官方团队在打包项目中踩过的坑