set
一个内部自动有序且不含重复元素的容器。
1.定义
加入头文件#include<set>,定义时用set<数据类型>队列名,如果数据类型是其他STL容器,定义时需要在>>之间加空格。
2.访问
只能通过迭代器访问,set<数据类型>::iterator 迭代器名 来定义迭代器。set不支持*(迭代器名+数字)的方式输出,所以要枚举或者直接*(迭代器名)。
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>a;
for(int i=0; i<5; i++)
a.insert(i);
a.insert(3);
set<int>::iterator it=a.begin();
for(; it!=a.end(); it++)
cout<<*it;
}
输出:01234
自动升序排列,删除重复元素。
3.常用函数
(1)insert()
insert(x)可以将x插入到容器中,并自动删除重复元素并升序排列,时间复杂度O(logN),N是容器内元素个数。
(2)find
find(x)会返回容器中值为x的迭代器,时间复杂度为O(logN)。
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>a;
for(int i=0; i<5; i++)
a.insert(i);
set<int>::iterator it=a.find(3);
cout<<*it;
}
输出:3
(3)erase()
两种使用方法,第一种是通过erase(it)来删除容器中迭代器为it的元素,时间复杂度O(1)。
或者erase(x),直接删除x元素,时间复杂度O(logN)。
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>a;
for(int i=0; i<5; i++)
a.insert(i);
set<int>::iterator it=a.begin();
a.erase(a.find(2));
for(; it!=a.end(); it++)
cout<<*it;
}
输出:0134
第二种是通过迭代器删除一个区间内的元素,erase(first,last)就是删除[first,last)之间的元素,时间复杂度O(last-first)。
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>a;
for(int i=0; i<5; i++)
a.insert(i);
set<int>::iterator it=a.find(1);
a.erase(it,a.find(3));
for(it=a.begin(); it!=a.end(); it++)
cout<<*it;
}
输出:034
(4)size
size()获取set内元素个数,时间复杂度O(1)。
(5)clear
clear()可以清除容器内所有元素,时间复杂度O(N)。