文章目录
一、什么是set
二、set的操作
1.set的定义
2.set内元素的访问
3.set中的函数
(1)insert()
(2)find()
(3)erase()
删除单个元素
删除一个区间内的所有元素
(4)size()
(5)clear()
一、什么是set
set意为集合,是一个内部自动有序,并且不含重复元素的容器,有些题目可能会要求去重操作,这时候就可以用set去解决,并且set可以实现自动排序,熟练的使用set之后可以减少某些题目的思维量,如果要使用set,需要添加头文件#include <set>
二、set的操作
1.set的定义
set<typename> name;
我们发现它的定义方法其实和vector十分类似,或者说大部分的STL容器都是如此的定义方法,这里的typename可以使任何的基本类型,例如int, char, double,结构体,当然也可以是其他的STL中的容器,如vector, set, queue
set<int> a; set<double> b; set<char> c; set<vector<int>> s; //这里如果报错的话,写成如下样子: set<vector<int> > s; //报错原因是C++11以前的编译器会把这个翻译成移位操作
2.set内元素的访问
set只能通过迭代器(iterator)访问
set<typename>::iterator it;
迭代器的遍历方法和vector中一致,不清楚的读者可以去看:STL—vector
这样it就是vector<typename>::iterator类型的变量,typename就是定义set时候的类型,当然it也可以写成t或者其他的样子,这里写成it是习惯,有了it这个迭代器,我们就可以通过*it来访问set中的元素,下面我们距离来说明:
s.insert(x)是把x插入到set中,下文会做讲解
s.begin()是v的首元素地址
s.end()是取v的尾元素地址的下一个地址
#include <iostream> #include <set> using namespace std; int main() { set<int> s; s.insert(2); s.insert(-3); s.insert(7); s.insert(2); s.insert(4); for (set<int>::iterator it = s.begin(); it != s.end(); it ++ ) cout << *it << ' '; return 0; }
当然我们可以通过auto缩写
#include <iostream> #include <set> using namespace std; int main() { set<int> s; s.insert(2); s.insert(-3); s.insert(7); s.insert(2); s.insert(4); for (auto it = s.begin(); it != s.end(); it ++ ) cout << *it << ' '; return 0; }
输出结果为:-3 2 4 7
可以发现,set内的元素自动单调递增且去重
3.set中的函数
(1)insert()
s.insert(x);
可以把x
插入到set
容器中,并且自动递增排序并且去重,时间复杂度为O(logN),其中N为set
内的元素个数
#include <iostream> #include <set> using namespace std; int main() { set<int> s; s.insert(2); s.insert(-3); s.insert(7); s.insert(2); s.insert(4); for (set<int>::iterator it = s.begin(); it != s.end(); it ++ ) cout << *it << ' '; return 0; }
输出结果为:-3 2 4 7