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学习(系统的学习)的更多相关文章

  1. 4 WPF学习---系统的学习XAML语法

    转载:http://blog.csdn.net/fwj380891124/article/details/8093001 1,XAML文档的树形结构: UI在用户眼里面是个平面结构.如下图所示,在用户 ...

  2. NNVM打造模块化深度学习系统(转)

    [摘录理由]: 之所以摘录本文,主要原因是:该文配有开源代码(https://github.com/dmlc/nnvm):读者能够直接体会文中所述的意义,便于立刻展开研究. MXNet专栏 :NNVM ...

  3. SpeeDO —— 并行深度学习系统

    SpeeDO —— 并行深度学习系统   摘要: 最近,AlphaGo又带起了一波深度学习的热潮.深度学习在很多领域都大幅提高了模型的精度,使得很多以前在实验室中的技术得以运用到日常的生活之中.然而, ...

  4. node+vue进阶【课程学习系统项目实战详细讲解】打通前后端全栈开发(1):创建项目,完成登录功能

    第一章 建议学习时间8小时·分两次学习      总项目预计10章 学习方式:详细阅读,并手动实现相关代码(如果没有node和vue基础,请学习前面的vue和node基础博客[共10章]) 视频教程地 ...

  5. Google会思考的深度学习系统

    上周五在旧金山举行的机器学习会议上,Google软件工程师Quoc V. Le讲解了Google的"深度学习"系统是如何运作的. "深度学习"需要用到大型计算机 ...

  6. 如何系统的学习Java

    初学者记住一点,学习Java一定是连续性的且循序渐进的“系统化”学习,首先我给你提供一个优秀Java工程师的学习路线. web前端方面:html.css,Java.jQuery.xml解析.Boots ...

  7. 一点点linux系统的学习心得

    我相信你正在阅读本文的时候,可能是因为你渴望学习Linux技术.我想分享一下过去两年中我自己的一些学习经历,希望你能更顺利地成为Linuxer. 两年前在Linux系统的运行和维护方面找到了一份工作( ...

  8. Unity3d-Particle System 5.x系统的学习(四)

    Unity3d-Particle System 5.x系统的学习(四) 今天,我们来聊聊unity5.x的粒子系统和unity4.x粒子系统的区别. 我大致看了下,区别还是蛮多的,但是总体的粒子制作思 ...

  9. 安装虚拟机和Linux系统的学习

    安装虚拟机和Linux系统的学习(随笔3) 1.安装虚拟机 首先我按着老师给的链接上的步骤一步一步安装VirtualBox,进行得十分顺利. 接着则是在虚拟机上安装Ubuntu. 然而安装完成以后按要 ...

随机推荐

  1. Entity Framework Tutorial Basics(31):Migration from EF 4.X

    Migration from Entity Framework 4.1/4.3 to Entity Framework 5.0/6.0 To migrate your existing Entity ...

  2. LeetCode第70题:爬楼梯

    问题描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...

  3. JaVA web服务器配置

    1:第一是下载好Eclipse开发工具,这里不做叙述,自行下载安装. 2:使用Eclipse开发WEB项目,启动Eclipse,选择File--->new --->other---> ...

  4. 关于文本PDG的字体

    作者:马健邮箱:stronghorse_mj@hotmail.com发布:2008.08.03 有不少人在问为什么有些文本PDG在SSREADER里看到的是宋体,在Acobat里看到的是黑体,其实原因 ...

  5. 【AutoResetEvent】

    AutoResetEvent用于线程间的同步 Test.cs代码: class Test { //构造函数,用一个指示是否将初始状态设置为终止的布尔值初始化该类的新实例. //false:无信号,子线 ...

  6. SingleClass单例类

    前言 对于一个单例类,无论初始化单例对象多少次,在程序的整个生命周期内,只会创建一个类的实例对象,而且只要程序不被杀死,该实例对象就不会被释放,并且该对象是全局的,能够被整个系统访问到. 在应用这个模 ...

  7. oracle 多表连接查询 join(一)

    一.简介: 多表连接查询通过表之间的关联字段,一次查询多表数据. 下面将依次介绍 多表连接中的如下方法: 1.from a,b 2.inner join 3.left outer join 4.rig ...

  8. 数据库 first

    数据库原理 .SQL(DDL.DML) 字符串操作 .数值操作 .日期操作 .空值操作 SQL(基础查询) .SQL(关联查询) SQL(高级查询)  子查询 视图.序列.索引 .约束

  9. [linux]阿里云主机的免密码登陆安全SSH配置与思考

    公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...

  10. luogu2155 [SDOI2008]沙拉公主的困惑

    link 求出1到N的阶乘中与M的阶乘互质的数的个数,对R取模,多组询问,R<=10^9+10,T<=10000,1 < = N , M < = 10000000 1到\(M! ...