C++标准模板库(STL)——set常见用法详解
- set的定义
set<typename> name;
typename可以是任何基本类型,如int、double、char、结构体等,也可以是STL标准容器,如vector、set、queue等。
set<int> name;
set<double> name;
set<char> name;
set<node> name; //node是结构体类型
- set容器内元素的访问
set只能通过迭代器访问:
set<typename>::iterator it;
例如下面的代码:
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 st.insert(2);
8 st.insert(5);
9 st.insert(2);
10 st.insert(6);
11 st.insert(2);
12 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){
13 cout<<*it<<" ";
14 }
15 return 0;
16 }
输出结果:
2 5 6
从输出结果我们能发现,set内的元素自动递增排序,并且自动去除了重复元素。
- set常用函数
(1)insert()
insert(x)可以将x插入到set容器中,自动递增排序并去重,时间复杂度为O(logN),其中N为set内的元素个数,前面的例子即说明了这一点。
(2)find()
find(v)返回set中对应的v的迭代器,时间复杂度为O(logN),其中N为set内的元素个数。
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 for(int i=0;i<5;i++){
8 st.insert(i+1);
9 }
10 set<int>::iterator it=st.find(1);
11 cout<<*it;
12 return 0;
13 }
输出结果:
1
(3)erase()
erase()可以删除单个元素,也可以删除一个区间内的所有元素。
① 删除单个元素
st.erase(it),it为所需要删除元素的迭代器。时间复杂度为O(1)。
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 st.insert(100);
8 st.insert(200);
9 st.insert(200);
10 st.insert(300);
11 st.erase(st.find(200)); //利用find()函数找到200,然后用erase删除它
12 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){
13 cout<<*it<<" ";
14 }
15 return 0;
16 }
输出结果:
100 300
st.erase(v),v为所需要删除元素的值。时间复杂度为O(logN),其中N为set内的元素个数。
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 st.insert(100);
8 st.insert(200);
9 st.insert(200);
10 st.insert(300);
11 st.erase(200); //删除set中值为200的元素
12 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){
13 cout<<*it<<" ";
14 }
15 return 0;
16 }
输出结果:
100 300
② 删除一个区间内的所有元素
st.erase(first, last)可以删除一个区间内的所有元素,其中first为所需要删除区间的起始迭代器,而last则为所需要删除区间的末尾迭代器的下一个地址,即删除[first,last)。时间复杂度为O(last-first)。
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 st.insert(100);
8 st.insert(200);
9 st.insert(300);
10 st.insert(400);
11 set<int>::iterator it=st.find(200);
12 st.erase(it,st.end()); //删除元素200至set末尾之间的元素
13 for(set<int>::iterator it=st.begin(); it!=st.end(); it++){
14 cout<<*it<<" ";
15 }
16 return 0;
17 }
输出结果:
100
(4)size()
size()用来获得set内元素的个数,时间复杂度为O(1)。
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 st.insert(1);
8 st.insert(2);
9 st.insert(3);
10 st.insert(4);
11 cout<<st.size();
12 return 0;
13 }
输出结果:
4
(5)clear()
clear()用来清空set中的所有元素,时间复杂度O(N),其中N为set内的元素个数。
1 #include <iostream>
2 #include <set>
3 using namespace std;
4 set<int> st;
5 int main()
6 {
7 st.insert(1);
8 st.insert(2);
9 st.insert(3);
10 st.insert(4);
11 st.clear(); //清空set
12 cout<<st.size();
13 return 0;
14 }
输出结果:
0
C++标准模板库(STL)——set常见用法详解的更多相关文章
- C++标准模板库(STL)——queue常见用法详解
queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...
- C++标准模板库(STL)——vector常见用法详解
vector的定义 vector<typename> name; 相当于定义了一个一维数组name[SIZE],只不过其长度可以根据需要进行变化,比较节省空间,通俗来讲,vector就是& ...
- C++标准模板库(STL)——map常见用法详解
map的定义 map<typename1, typename2> mp; map需要确定映射前类型和映射后类型,所以需要在<>内填写两个类型,第一个是键的类型,第二个是值的类型 ...
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL pair 常见用法详解
<算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...
- STL stack 常见用法详解
<算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL queue 常见用法详解
<算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...
- STL map 常见用法详解
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...
随机推荐
- 路由器逆向分析------MIPS交叉编译环境的搭建(Buildroot)
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/68950682 为了能在我们熟悉的windows或者ubuntu下开发mips架构的 ...
- 《前端运维》一、Linux基础--基础命令(1)
在开始之前,你需要做一些准备工作,去阿里买一台服务器,服务器的具体细节其实并不是十分重要,我也不会在这里一步一步的教大家如何去买一个服务器.百度一下足够了,但是还是要贴一下这篇文章中,我所使用的服务器 ...
- 如何使用flask将模型部署为服务
在某些场景下,我们需要将机器学习或者深度学习模型部署为服务给其它地方调用,本文接下来就讲解使用python的flask部署服务的基本过程. 1. 加载保存好的模型 为了方便起见,这里我们就使用简单的分 ...
- Eclipse的安装及相关配置
一.Eclipse的下载 二.Eclipse的安装 三.Eclipse中相关配置 一.Eclipse的下载 Eclipse各版本下载地址 1.选择要下载的版本(我这里选择的4.14版) 2.选择与自己 ...
- 改善c++程序的150个建议(读后总结)-------10-11
10. 优化结构体中元素的布局 结构体变量所占空间大小并不是其所含类型所占字节数之和,其所占内存字节数涉及到字节对齐. 字节对齐 :变量在内存中储存都是以字节数为单位,每一个字节都有自己的地址,逻辑上 ...
- Node.js核心模块API之文件操作
参考:https://www.runoob.com/nodejs/nodejs-fs.html 异步I/O 1,文件操作 2,网络操作 在浏览器中也存在异步操作 1,定时任务 2,事件处理 3,Aja ...
- lua编译为二进制方式
当不想使用户看到lua源码,文本文件可以通过luac,把lua文本文件"编译"成二进制的文件. lc@lc-virtual-machine:~/lua$ luac -o redis ...
- 烽火SATA SSD DSS200-B
烽火SATA SSD DSS200-B 运营商用户 > 产品与解决方案 > 产品 烽火SATA SSD DSS200-B 烽火通信 DSS200-B 2.5" SATA SSD ...
- CentOS6.7系统文本安装-2020
CentOS6.7系统文本安装 [日期:2016-01-30] 来源:Linux社区 作者:endmoon [字体:大 中 小] 一.选择虚拟机软件 1)VMware Workstation ...
- 2.Python入门-计算机组成、指令和程序、标识符、变量、数据类型、对象和变量关系、运算符
一.计算机的组成 计算机由两部分组成:硬件 和 软件 硬件包含:键盘.鼠标.显示器.CPU.主板.内存.硬盘 ... -硬件是看的见摸得着的 软件包含:系统软件(windows.macOS.Linux ...