set常用方法
函数名 | 解释 |
---|---|
begin | 返回容器的起始迭代器 |
end | 返回结束迭代器 |
count | 返回某元素的个数 |
erase | 删除集合某个元素 |
find | 返回被查找元素的迭代器 |
insert | 向容器中插入元素 |
size | 返回容器元素的个数 |
max_size | 返回当前set容器可存元素的个数 |
lower_bound | 返回第一个大于或等于的元素 |
upper_bound | 返回第一个大于的元素 |
multiset
函数名 | 解释 |
---|---|
begin | 返回容器的起始迭代器 |
end | 返回结束迭代器 |
count | 返回某元素的个数 |
erase | 删除集合某个元素 |
find | 返回被查找元素的迭代器 |
insert | 向容器中插入元素 |
size | 返回容器元素的个数 |
合法字符
递归形式
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
set<string> parenthesis(int n)
{
set<string> s_n;
if(n==1)
{
s_n.insert("()");
return s_n;
}
set<string> s_n_1=parenthesis(n-1);
for(set<string>::iterator it=s_n_1.begin();it!=s_n_1.end();it++)
{
s_n.insert("()"+*it);
s_n.insert(*it+"()");
s_n.insert("("+*it+")");
}
return s_n;
}
int main()
{
int n;
cin>>n;
set<string> s=parenthesis(n);
for(set<string>::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
迭代形式
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
set<string> parenthesis(int n)
{
set<string> res;
res.insert("()");
for(int i=2;i<=n;i++)
{
set<string> new_res;
for(set<string>::iterator it=res.begin();it!=res.end();it++)
{
new_res.insert("()"+*it);
new_res.insert(*it+"()");
new_res.insert("("+*it+")");
}
res=new_res;
}
return res;
}
int main()
{
int n;
cin>>n;
set<string> s=parenthesis(n);
for(set<string>::iterator it=s.begin();it!=s.end();it++)
{
cout<<*it<<endl;
}
return 0;
}
子集生成
递归
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
int arr[]={1,2,3};
set<set<int> > getSubsets(int n,int cur)
{
set<set<int> > newSet;
if(cur==0)
{
set<int> nil;
set<int> first;
first.insert(arr[0]);
newSet.insert(nil);
newSet.insert(first);
return newSet;
}
set<set<int> > oldSet=getSubsets(n,cur-1);
for(set<set<int> >::iterator it=oldSet.begin();it!=oldSet.end();it++)
{
newSet.insert(*it);
set<int> s(*it);
s.insert(arr[cur]);
newSet.insert(s);
}
return newSet;
}
int main()
{
set<set<int> > s=getSubsets(2,3);
for(set<set<int> >::iterator it=s.begin();it!=s.end();it++)
{
if((*it).size()==0)
continue;
for(set<int>::iterator iit=(*it).begin();iit!=(*it).end();iit++)
cout<<*iit<<" ";
cout<<endl;
}
return 0;
}
迭代
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
int arr[]={1,2,3,4,5,6,7,8,9};
set<set<int> > getSubsets(int n)
{
set<set<int> > res;
set<int> s;
res.insert(s);//将空的加入
for(int i=0;i<n;i++)
{
set<set<int> > res_new(res);
for(set<set<int> >::iterator it=res.begin();it!=res.end();it++)
{
set<int> s(*it);
s.insert(arr[i]);
res_new.insert(s);
}
res=res_new;
}
return res;
}
int main()
{
set<set<int> > s=getSubsets(9);
for(set<set<int> >::iterator it=s.begin();it!=s.end();it++)
{
if((*it).size()==0)
continue;
for(set<int>::iterator iit=(*it).begin();iit!=(*it).end();iit++)
cout<<*iit<<" ";
cout<<endl;
}
return 0;
}
list解决方法
#include<iostream>
#include<algorithm>
#include<list>
#include<math.h>
using namespace std;
int arr[]={1,2,3,4,5,6,7,8,9};
list<list<int> > getSubsets(int n)
{
list<list<int > > res;
for(int i=pow(2,n)-1;i>0;i--)
{
list<int> s;
for(int j=n-1;j>=0;j--)
{
if(((i>>j)&1)==1)
{
s.push_back(arr[j]);
}
}
s.sort();
res.push_back(s);
}
return res;
}
int main()
{
list<list<int> > l=getSubsets(3);
l.sort();
for(list<list<int> >::iterator it=l.begin();it!=l.end();it++)
{
for(list<int>::iterator mit=(*it).begin();mit!=(*it).end();mit++)
{
cout<<*mit<<" ";
}
cout<<endl;
}
return 0;
}