set学习(系统的学习)
set是STL中一种标准关联容器。它底层使用平衡的搜索树——红黑树实现,插入删除操作时仅仅需要指针操作节点即可完成,不涉及到内存移动和拷贝,所以效率比较高。set,顾名思义是“集合”的意思,在set中元素都是唯一的,而且默认情况下会对元素自动进行升序排列,支持集合的交(set_intersection),差(set_difference) 并(set_union),对称差(set_symmetric_difference) 等一些集合上的操作,如果需要集合中的元素允许重复那么可以使用multiset。
下面介绍set的常用操作:
1:注意包含头文件<set>
set只有自加和自减运算!!!
s.begin() 返回set容器的第一个元素的地址
s.end() 返回set容器的最后一个元素之后的地址
s.clear() 删除set容器中的所有的元素
s.empty() 判断set容器是否为空
s.insert() 插入一个元素
s.erase() 删除一个元素
s.size() 返回当前set容器中的元素个数
具体看代码:
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> s;//创建一个set对象
for(int i=;i<;i++)
s.insert(i+);//插入三个元素,10 11 12
cout<<*s.begin()<<endl;//输出第一个元素10
cout<<*(--s.end())<<endl;//输出最后一个元素
s.erase(s.begin());//删除第一个元素
cout<<*s.begin()<<endl;//第一个元素变为11
cout<<s.size()<<endl;//答案为2
s.clear();//清空所有元素
cout<<s.size()<<endl;//输出为0
return ;
}
迭代器的使用:
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> s;//创建一个set对象
for(int i=;i<;i++)
s.insert(i+);//插入三个元素,10 11 12
set<int>::iterator it;//创建一个迭代器
for(it=s.begin();it!=s.end();it++)//用迭代器进行遍历
cout<<*it<<" ";
cout<<endl;
it=s.begin();
it++;
s.erase(it);//用迭代器进行删除操作
for(it=s.begin();it!=s.end();it++)//用迭代器进行遍历
cout<<*it<<" ";
cout<<endl;
return ;
}
修改:不能修改容器内数据,所以只能删除某元素再插入要修改的数值
查找:s.find()
如果容器内不存在该元素,返回值等于s.end();
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> s;//创建一个set对象
for(int i=;i<;i++)
s.insert(i+);//插入三个元素,10 11 12
set<int>::iterator it;//创建一个迭代器
for(it=s.begin();it!=s.end();it++)//用迭代器进行遍历
cout<<*it<<" ";
cout<<endl;
if(s.find()!=s.end()) cout<<"yes"<<endl;
return ;
}
set的其它常用操作:
s.lower_bound() 返回第一个大于或等于给定关键值的元素
s.upper_bound() 返回第一个大于给定关键值的元素
s.equal_range() 返回一对定位器,分别表示 第一个大于或等于给定关键值的元素 和 第一个大于给定关键值
的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于
s.end()
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int> s;//创建一个set对象
for(int i=;i<;i++)
s.insert(i+);//插入三个元素,10 11 12
cout<<*s.lower_bound()<<endl;//输出10
cout<<*s.upper_bound()<<endl;//输出11
cout<<*s.equal_range().first<<endl;//
cout<<*s.equal_range().second<<endl;//
return ;
}
如果要把set定义为降序:可以如下定义:
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int,greater<int> >s;
for(int i=;i<;i++)
s.insert(i+);
set<int>::iterator it;
//降序输出
for(it=s.begin();it!=s.end();it++) cout<<*it<<endl;
return ;
}
set学习(系统的学习)的更多相关文章
- 4 WPF学习---系统的学习XAML语法
转载:http://blog.csdn.net/fwj380891124/article/details/8093001 1,XAML文档的树形结构: UI在用户眼里面是个平面结构.如下图所示,在用户 ...
- NNVM打造模块化深度学习系统(转)
[摘录理由]: 之所以摘录本文,主要原因是:该文配有开源代码(https://github.com/dmlc/nnvm):读者能够直接体会文中所述的意义,便于立刻展开研究. MXNet专栏 :NNVM ...
- SpeeDO —— 并行深度学习系统
SpeeDO —— 并行深度学习系统 摘要: 最近,AlphaGo又带起了一波深度学习的热潮.深度学习在很多领域都大幅提高了模型的精度,使得很多以前在实验室中的技术得以运用到日常的生活之中.然而, ...
- node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能
第一章 建议学习时间8小时·分两次学习 总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章]) 视频教程地 ...
- Google会思考的深度学习系统
上周五在旧金山举行的机器学习会议上,Google软件工程师Quoc V. Le讲解了Google的"深度学习"系统是如何运作的. "深度学习"需要用到大型计算机 ...
- 如何系统的学习Java
初学者记住一点,学习Java一定是连续性的且循序渐进的“系统化”学习,首先我给你提供一个优秀Java工程师的学习路线. web前端方面:html.css,Java.jQuery.xml解析.Boots ...
- 一点点linux系统的学习心得
我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...
- Unity3d-Particle System 5.x系统的学习(四)
Unity3d-Particle System 5.x系统的学习(四) 今天,我们来聊聊unity5.x的粒子系统和unity4.x粒子系统的区别. 我大致看了下,区别还是蛮多的,但是总体的粒子制作思 ...
- 安装虚拟机和Linux系统的学习
安装虚拟机和Linux系统的学习(随笔3) 1.安装虚拟机 首先我按着老师给的链接上的步骤一步一步安装VirtualBox,进行得十分顺利. 接着则是在虚拟机上安装Ubuntu. 然而安装完成以后按要 ...
随机推荐
- 形式化验证工具(PAT)2PC协议学习
今天我们来看看2PC协议,不知道大家对2PC协议是不是了解,我们先简单介绍一下. 两阶段提交协议(two phase commit protocol, 2PC)可以保证数据的强一致性,许多分布式关系型 ...
- deb包制作(转)
deb 包已被广泛应用但是也在不断的更新,这里介绍Ubuntu deb包安装设置使用,帮助大家安装更新Ubuntu deb包系统.制作Ubuntu deb包的三种方法 | Sean's Blog [转 ...
- C#中关于换行符的记录
最近在做一个练习的时候,从其他数据库提出来数据装到自己的数据表中,发现同是编辑器的内容却在页面上显示不出来,但是在数据库中又确实存在,经过一番折腾之后发现是 换行符 的问题.在我的编辑器中是以 ‘\r ...
- symbol访问法及symbor注册表
symbol主要作用是防止对象属性名冲突 在ES6之前,对象的属性名只能是字符串,这样很容易造成字符串的冲突. 例:假设person对象是从外部库引入的一个对象 let person = { name ...
- CHTools-OC版本目录介绍
1.CHOCBase 这里主要讲的是Objective-C语言的基础语法. 2.CHViewControllers 3.CHNS类 5.CHUI类 这里是CHUI类的集合,用于处理界面显示,其中包含部 ...
- b,u,i,s,这些被删除的标签以及用来替换他们的标签
加粗文字 给文字加下划线 倾斜文字 给文字加删除线 这些是以前的HTML语言修饰文字用的,没有语义,所以被删除,不到万不得已 不能使用,HTML给了新的标签替换他们,并且有语义 定义重要性强调的文字 ...
- winform datagridview不显示滚动条
datagridview 数据行数已经超出表格显示范围了,为什么右侧没有滚动条呢? 这个其实不是DataGridView的问题,实际上滚动条是出现了的,但被其他东西挡住了.如果网格是放在panel上的 ...
- MobaXterm替换cmder
Windows上命令行工具cmder确实很好用,其扩展功能呢,比系统自带强大几倍.后来在使用MobaXterm,官网https://mobaxterm.mobatek.net/免费版本功能足够强大,支 ...
- P4094 [HEOI2016/TJOI2016]字符串 后缀数组+主席树+二分答案
$ \color{#0066ff}{ 题目描述 }$ 佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了一个长为n的字符串s,和m个问题.佳媛姐姐必须 ...
- shared_ptr 和auto_ptr智能指针
shared_ptr:计数的智能指针 它是一个包装了new操作符在堆上分配的动态对象,但它实现的是引用计数型的智能指针 ,可以被自由地拷贝和赋值,在任意的地方共享它,当没有代码使用(引用计数为0)它时 ...