1.关于set的概念  

  set   是STL中的集合。

  集合我们都很熟悉,具有排异性,在这里set中也遵循这条规矩。 而且在set中,存在系统自动排序的操作。

2.set的常用函数

  set 与 vector具有类似的用法

#include<set>       //set 的头文件 

    set<int> s;        //声明一个int型set变量,名为s 

    s.empty()       //判定 s 是否为空 

  s.insert(1);       //把数字1插入到s中 

  s.clear();        //清空s 

  s.erase(1);        //假若s存在1,则删除1 

  s.begin();        //返回s中第一个元素地址  所以 *s.begin() 

  s.end();        //返回s中最后一个元素地址
//这个特殊一点,返回的是s中最后一个元素的下一个元素
//所以 *(--s.end())是s最后一个元素   s.rbegin(); //rbegin可以看做逆向的第一个地址 相当于(--s.end()) 此处取的已经是s最后一个元素   s.rend(); //rend可以看做逆向的最后一个地址 相当于 s.begin()   s.count(1); //计算s中1出现的次数,而次数只存在0与1,所以可以借来查找是否存在1   s.size(); //返回s中元素的个数   s.max_size(); //s最大能存元素的数目   s.find(2); //查找2   set<int>::iterator iter; //迭代器

erase(iterator)  ,删除定位器iterator指向的值

erase(first,second),删除定位器first和second之间的值

erase(key_value),删除键值key_value的值

//lower_bound(key_value) ,返回第一个大于等于key_value的定位器
//upper_bound(key_value), 返回最后一个大于等于key_value的定位器
#include <iostream>
#include <set>
using namespace std;
int main()
{
set<int> s;
s.insert();
s.insert();
s.insert();
cout<<*s.lower_bound()<<endl;
cout<<*s.lower_bound()<<endl;
cout<<*s.upper_bound()<<endl;
return ;
}

运行结果:

  

  小结:set中的操作是不进行任何的错误检查的,比如定位器的是否合法等等,所以用的时候自己一定要注意。

附上一道set的入门题:

  hdu 1412  {A} + {B}    http://acm.hdu.edu.cn/showproblem.php?pid=1412

Problem Description
给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素. Input
每组输入数据分为三行,第一行有两个数字n,m(<n,m<=),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开. Output
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开. Sample Input Sample Output

AC代码:

#include<iostream>
#include<set>
using namespace std;
int main()
{
int n,m,x;
set<int>s;
set<int>::iterator it;
while (cin>>n>>m){
s.clear();
for (int i=;i<n+m;i++){
cin>>x;
s.insert(x);
}
it=s.begin();
int cnt=s.size();
for (int i=;i<=cnt;i++){
if (i==)
cout<<*it;
else
cout<<" "<<*it;
it++;
}
cout<<endl;
}
return ;
}

C++ STL中的 Set的用法的更多相关文章

  1. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  2. 数据离散化 ( 以及 stl 中的 unique( ) 的用法 )+ bzoj3289:Mato的文件管理

    http://blog.csdn.net/gokou_ruri/article/details/7723378 ↑惯例Mark大神的博客   bzoj3289:Mato的文件管理 线段树求逆序对+莫队 ...

  3. [转] C++ STL中map.erase(it++)用法原理解析

    总结一下map::erase的正确用法. 首先看一下在循环中使用vector::erase时我习惯的用法: for(vector<int>::iterator it = vecInt.be ...

  4. (转载)C++STL中vector容器的用法

     vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...

  5. STL中pair容器的用法

    1.定义pair容器 1 pair <int, int> p, p1; 2 //定义 [int,int] 型容器 //直接初始化了p的内容 pair<string,int>p( ...

  6. STL中栈stack的用法

    头文件: #include <stack> 建立一个栈stack < 类型 > s //例如 stack<int> s 加入一个新的元素s.push( a ) 询问 ...

  7. STL中队列queue的用法

    头文件:#include <queue> 建立一个队列queue < 类型 > q 加入一个新的元素q.push(a) 询问队首元素q.front() 弹出队首元素q.pop( ...

  8. STL中mem_fun和mem_fun_ref的用法

    例如:假设有如下的代码: class Employee { public: int DoSomething(){} } std::vector<Employee> Emps; 假设我们要调 ...

  9. STL中vector、list、deque和map的区别

    1 vector     向量 相当于一个数组    在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capac ...

随机推荐

  1. tcp长连接分包方法

    tcp长连接分包的四种方法1.消息长度固定2.使用特殊的字符串作为消息边界.比如http协议的headers以“\r\n”为字段的分隔符3.在每条消息的头部加一个长度字段.这是最常见的4.利用消息本身 ...

  2. hbase hfilev2

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/25508809 HFileV2文件 HFile ...

  3. PHP------XML

    XML XML的含义:可扩展标记语言,设计出来的目的是:传输数据 HTML的含义:超文本标记语言,设计出来的目的是:显示数据 它们两个设计出来的目的是不一样的. 它们两个都是标记语言,相似性比较高. ...

  4. 转:git 的常用命令

    转自:阮一峰 常用git命令清单 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Wor ...

  5. MBTiles 离线地图演示 - 基于 Google Maps JavaScript API v3 + SQLite

    MBTiles 是一种地图瓦片存储的数据规范,它使用SQLite数据库,可大大提高海量地图瓦片的读取速度,比通过瓦片文件方式的读取要快很多,适用于Android.IPhone等智能手机的离线地图存储. ...

  6. CSU - 1224 ACM小组的古怪象棋

    传送门: http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1224 1224: ACM小组的古怪象棋 Lime Limit: 1 Sec     ...

  7. @class CLASS ;必须加分号,且卸载@interface之前

    1. @class CLASS ;必须加分号,且卸载@interface之前 示例代码如下: #import <UIKit/UIKit.h> @class WZProduct;  //注意 ...

  8. New Language Features in C# 6

    Source:https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23-6 This document describes ...

  9. Relay GraphQL理解

    Relay是构建数据驱动 React 应用的js框架. Relay:特性一.声明式:不再使用一个命令式API与数据存储通讯.而是简单的使用RraphQL声明组件数据需求,让Relay理解如何及什么时候 ...

  10. 在ASP.NET Core中怎么使用HttpContext.Current (转载)

    一.前言 我们都知道,ASP.NET Core作为最新的框架,在MVC5和ASP.NET WebForm的基础上做了大量的重构.如果我们想使用以前版本中的HttpContext.Current的话,目 ...