set的使用

set是什么

set是一个内部有序且不含重复元素的容器

用处

*使得元素自动有序
*去除重复元素

set的引入

    # include <set>
using namespace std;

set的定义

    set<typename> name;
//typename可以是任何类型,比如int、float、或者结构体、对象

定义的实际例子

    set<int> name;
set<float> name;
set<double> name;
set<node> name;//node是一个结构体
set<typename> array[max_size];//定义一个set类型的数组

set的使用

set内部的元素的访问

set只能通过迭代器来进行访问

    //定义迭代器的时候要填写实际的类型
set<typename>::iterator it;
set<int>::iterator it;
set<char>::iterator it;

除了vector和string外的stl容器都不支持*(it+i)的访问方式

元素的插入

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(3);
st.insert(2);
st.insert(7);
st.insert(1);
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
cout<<*it<<endl;
}
return 0;
}

set常见函数的使用

insert

insert(x)将x插入set,并自动使得该元素有序且可以去重

find

find(value)查找到集合中值等于value位置的迭代器

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
for(int i=0;i<4;i++)
{
st.insert(i);
}
set<int>::iterator it=st.find(3);
cout<<*it<<endl;
return 0;
}

erase()

erase有两种用法:

1.删除单个元素

1)erase(it),it为要删除元素的迭代器

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(1);
st.insert(2);
st.insert(3);
st.insert(4);
st.erase(st.find(2));
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
return 0;
}

2)erase(value),value为要删除的值

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(1);
st.insert(2);
st.insert(3);
st.insert(4);
st.erase(4);
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
return 0;
}

2.删除一个区间内的元素

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(1);
st.insert(2);
st.insert(3);
st.insert(4);
st.erase(4);
set<int>::iterator it=st.find(1);
st.erase(it,st.end());
for(set<int>::iterator it=st.begin();it!=st.end();it++)
{
cout<<*it<<' ';
}
cout<<endl;
return 0;
}

size()

用来获取集合元素数量

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(1);
st.insert(2);
st.insert(3);
st.insert(4);
st.erase(4);
cout<<st.size()<<endl;
return 0;
}

clear()

清空所有元素

# include <iostream>
# include <set>
using namespace std;
int main(void)
{
set<int> st;
st.insert(1);
st.insert(2);
st.insert(3);
st.insert(4);
st.clear();
cout<<st.size()<<endl;
return 0;
}

set的常见用法的更多相关文章

  1. Linux中find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  2. php中的curl使用入门教程和常见用法实例

    摘要: [目录] php中的curl使用入门教程和常见用法实例 一.curl的优势 二.curl的简单使用步骤 三.错误处理 四.获取curl请求的具体信息 五.使用curl发送post请求 六.文件 ...

  3. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  4. find常见用法

    Linux中find常见用法示例 ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; find命令的参数 ...

  5. iOS 开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  6. iOS开发多线程篇—GCD的常见用法

    iOS开发多线程篇—GCD的常见用法 一.延迟执行 1.介绍 iOS常见的延时执行有2种方式 (1)调用NSObject的方法 [self performSelector:@selector(run) ...

  7. [转]EasyUI——常见用法总结

    原文链接: EasyUI——常见用法总结 1. 使用 data-options 来初始化属性. data-options是jQuery Easyui 最近两个版本才加上的一个特殊属性.通过这个属性,我 ...

  8. NSString常见用法总结

    //====================NSStirng 的常见用法==================== -(void)testString { //创建格式化字符串:占位符(由一个%加一个字 ...

  9. [转]Linux中find常见用法示例

    Linux中find常见用法示例[转]·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;find命令的参 ...

  10. [转载]typedef常见用法

    注:本文系转载,并修改了一些错误. typedef常见用法 1.常规变量类型定义 例如:typedef unsigned char uchar描述:uchar等价于unsigned char类型定义 ...

随机推荐

  1. CSS3的多列属性

    CSS3 可以将文本内容设计成像报纸一样的多列布局 ㈠CSS3 多列属性 ㈡column-count 属性 ⑴语法:column-count: number|auto; ⑵值:          ㈢c ...

  2. react 中的路由 Link 和Route和NavLink

    route是配置,link是使用 https://blog.csdn.net/chern1992/article/details/77186118(copy) 嵌套路由一般使用Route,类似于vue ...

  3. TTTTTTTTTTTTT CF Good Bye 2015 C- New Year and Domino(CF611C) 二维前缀

    题目 题意:给你一个n*m由.和#组成的矩阵,.代表可以放,#代表不可以,问在左上角(px,py)到(右下角qx,qy)这样的一个矩阵中,放下一个长度为2宽度为1的牌有多少种放法: #include ...

  4. 1143, 3997: Dilworth定理的简单应用

    偏序集上的最小链覆盖等于最长反链 于是两道题 1143: [CTSC2008]祭祀river 求偏序集上的最长反链 转换成偏序集上的最小链覆盖 求个闭包,转换成最小路径覆盖,二分图匹配一发 #incl ...

  5. Unity3D_(游戏)甜品消消乐03_游戏UI设计

    甜品消消乐01_游戏基础界面 传送门 甜品消消乐02_游戏核心算法 传送门 甜品消消乐03_游戏UI设计    传送门 (源码在文章最下面~) 实现过程 游戏界面UI 分数与时间的UI显示 有关游戏U ...

  6. spring boot 常用注解

    @RestController和@RequestMapping注解 4.0重要的一个新的改进是@RestController注解,它继承自@Controller注解.4.0之前的版本,spring M ...

  7. 2018-2019-2 网络对抗技术 20165232 Exp7 网络欺诈防范

    2018-2019-2 网络对抗技术 20165232 Exp7 网络欺诈防范 原理与实践说明 1.实践目标 理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 2.实践内容概述 简单应 ...

  8. vue实现百度下拉框

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. Retrofitting Analysis

    Retrofitting Analysis To figure out the process of retrofitting[1] objective updating, we do the fol ...

  10. iframe嵌套的页面之间传值问题

    项目中很多时候会遇到需要用 iframe 嵌套页面的情况.有时候会有这样的需求: iframe 嵌套的页面 A ,点击之后要跳到页面 B ,但是同时还需要 A 页面中的某个属性值. 此时可以先把 A ...