STL里面的一个实用的的容器set,可以称之为集合,在里面存放的元素唯一,无序,确定。
所需头文件: #include<set>
set中常用方法:
begin():返回第一个元素的地址.
end():返回最后一个元素的地址.
empty():判断集合是否为空.
clear():清空set中所有元素.
max_size():返回set容器可能包含的元素最大个数.
size():返回当前容器中元素的个数.
count():返回set中某个键值的个数,因为一个键值在set中只能出现一次或0次,也就变成了判断该元素是否出现.
equal_range():返回一对定位器,分别表示第一个大于或等于给定关键值的元素和 第一个大于给定关键值的元素,这个返回值是一个pair类型,如果这一对定位器中哪个返回失败,就会等于end()的值.
erase(it):删除迭代器指针it处元素.
insert():插入某个元素.
代码演示:
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <cstring> #include <cmath> #include <stack> using namespace std; int main(){ IO; set<int>s; for(int i=1;i<=10;i++) s.insert(i); cout<<s.size()<<endl; cout<<s.max_size()<<endl; cout<<*s.begin()<<endl; cout<<*s.end()<<endl; set<int>::iterator it; for(it=s.begin();it!=s.end();it++){ cout<<*it<<' '; } cout<<endl; if (s.count(1)) cout<<"1在set容器里"<<endl; pair<set<int>::const_iterator,set<int>::const_iterator> pr; pr=s.equal_range(3); cout<<"第一个大于等于3的数是:"<<*pr.first<<endl; cout<<"第一个大于3的数是"<<*pr.second<<endl; set<int>::iterator first; set<int>::iterator second; s.erase(s.begin()); first=s.begin(); second=first; second++;second++; s.erase(first,second); cout<<"删除后set中元素有:"<<endl; for(it=s.begin();it!=s.end();it++) cout<<*it<<" "; cout<<endl; return 0; }运行截图:
再来补上一个今天用set做的题:
传送门:Aramic script
题目大概意思是:给你n个字符串,每个字符串的根定义为去掉字符串里重复的字符后剩下的字符构成的字符串,不管顺序,问最后有多少个根字符串?
AC代码:
/********************************************** *Author* :coderdz *Created Time* : 2018/5/2 20:42:04 *********************************************/ #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <set> #include <map> #include <cmath> #include <cstdlib> #include <ctime> #include <stack> using namespace std; #define IO ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define rep(i,n) for(int i=1;i<=n;i++); #define m(a,b) memset(a,b,sizeof(a)) typedef pair<int, int> PII; typedef long long LL; const int MAXN=1e5+10; inline void OPEN(string s){ freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } int main(){ IO; set<string>s; s.clear(); int n; cin>>n; while(n--){ set<char>ss; set<char>::iterator it; ss.clear(); string t; cin>>t; for(int i=0;i<t.size();i++) ss.insert(t[i]); t=""; for(it=ss.begin();it!=ss.end();it++) t+=(*it); s.insert(t); } cout<<s.size()<<endl; return 0; }