**头文件**#include<set>(使用万能头文件include<bits/stdc++.h>的除外)。
简单的特点:
1.在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序(默认从小到大)
2.set中数元素的值不能直接被改变
3.当对容器中的元素进行插入或者删除时,操作之前的所有迭代器在操作之后依然有效。
4.set容器内所有元素都是以节点的方式来存储,其节点结构和链表差不多,指向父节点和子节点。
定义一个容器;
1:using namespace std;
2:直接set<成员类型>成员名
例如:定义一个整型的set容器叫做s,直接set<int> s就行了。
set中常用的方法 :
erase(it) 删除迭代器指针it处元素
s.erase(s.begin()) 删除s.begin()的元素
begin() ,返回set容器的第一个元素的地址(想返回值注意加*)
s.begin() 或 *s.begin() 即可
end() ,返回set容器的最后一个元素的地址(想返回值注意加*)
s.end() 或 *s.end()即可
clear() ,删除set容器中的所有的元素
step1:将你的set容器清空。
例如:将刚才定义的s清空,则为:s.clear()即可。
empty() ,判断set容器是否为空
step1:判断你的容器是否为空。
例如:判断s是否为空,只需 if(s.empty()) 即可,判断是否非空,只需if (!s.empty())。
size() ,返回当前set容器中的元素个数
例如:询问s的大小,只需 printf("%d\n",s.size())即可。
特别的,size返回的是非重复元素,而不是所有元素。
例如:
s里面有{1 2 3 4 5 6 7 8} 8个元素,那么他的返回值是8;
s里面有{1 1 1 1 1 1 1 1} 8个元素,那么他的返回值是1;
s里面有{1 1 1 2 2 2 2 8} 8个元素,那么他的返回值是3。
insert() ,向容器中插入一个元素
作用:往你定义的set里面加上一个数。
step1:定义一个辅助变量tmp;
step2:输入tmp;
step3:将tmp放进你定义的set容器里面。
例如:往刚定义的s里面放个8,那么直接:s.insert(8)即可。
列子1
#include<set> #include<iostream> using namespace std; int main() { set<int>s; int a[105], n; cin >> n;//输入的袁术的个数 for (int i = 0; i < n; i++) { cin >> a[i]; s.insert(a[i]); } cout << s.size() << endl; while (!s.empty()) { cout << *s.begin() << '\t'; s.erase(s.begin()); } return 0; }
列子2(不用set来去重然后排序)