文章目录
Contest100000597 - 《算法笔记》6.2小节——C++标准模板库(STL)介绍->set的常见用法详解
6.1 set的常见用法详解
set翻译为集合,是一个内部自动有序且不含重复元素的容器
1.set的定义
2.set容器内元素的访问
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
int main()
{
set<int> st;
st.insert(3);//insert(x)将x插入set中
st.insert(5);
st.insert(2);
st.insert(3);
//注意,不支持it < st.end()的写法
for(set<int>::iterator it = st.begin();it != st.end();it++){
printf("%d ",*it);
}
return 0;
}
3.set常用函数实例解析
(1)insert()
(2)find()
(3)erase()
(4)size()
(5)clear()
set函数整合代码
//set操作
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
int main()
{
set<int> st;
//#########-1-初始insert()1~3
for(int i=1;i <= 3;i++){
st.insert(i);
}
cout<<"set初始插入:"<<endl;
for(set<int>::iterator it = st.begin();it != st.end();it++){
printf("%d ",*it);
}
cout<<endl;
cout<<"此时set的size为:"<<st.size()<<endl;
cout<<endl;
//#########-2-在set中查找2,返回其迭代器
cout<<"set中查找2的下标为:"<<endl;
set<int>::iterator it = st.find(2);
printf("%d ",*it);
cout<<endl;
cout<<"此时set的size为:"<<st.size()<<endl;
cout<<endl;
//#########-3-在set中删除2
st.erase(st.find(2));//或st.erase(2),效果一致,两种用法
cout<<"在set中删除2后set中元素为:"<<endl;
for(set<int>::iterator it = st.begin();it != st.end();it++){
printf("%d ",*it);
}
cout<<endl;
cout<<"此时set的size为:"<<st.size()<<endl;
cout<<endl;
/*//区间删除
st.erase(st.find(1),st.end());
for(set<int>::iterator it = st.begin();it != st.end();it++){
printf("%d ",*it);
} */
//#########-4-在set中删除所有元素
st.clear();
cout<<"在set中clear后set中元素为:"<<endl;
for(set<int>::iterator it = st.begin();it != st.end();it++){
printf("%d ",*it);
}
cout<<endl;
cout<<"此时set的size为:"<<st.size()<<endl;
cout<<endl;
return 0;
}
3.set的常见用途
Codeup习题
Contest100000597 - 《算法笔记》6.2小节——C++标准模板库(STL)介绍->set的常见用法详解
题目链接:http://codeup.cn/contest.php?cid=100000597
6126-Problem-A-Set-Similarity(25)
题目链接: http://codeup.cn/problem.php?cid=100000597&pid=0
//6126-Problem-A-Set-Similarity(25)
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
int main()
{
int N;
while(cin>>N){
set<int> st[55];
for(int i=1;i<=N;i++){//输入N个集合
int M;
cin>>M;
while(M--){//输入每个集合的M个元素
int x;
cin>>x;
st[i].insert(x);
}
}
int k;
cin>>k;//k个查询
while(k--){
int i,j;//第i和j个集合进行相似度判断
cin>>i>>j;
int Nc=0,Nt=st[j].size();//Nt为两集合不同元素总数,初始值设为j的元素数
for(set<int>::iterator it = st[i].begin();it != st[i].end();it++){
if(st[j].find(*it) != st[j].end()) Nc++;//比较i、j中元素,相等且没到j末尾,则两集合共有的不同元素个数加一
else Nt++;//如果i、j中元素不同或者超过j的个数,则Nt++
}
printf("%.1f%%\n",100.0*Nc / Nt);
}
}
return 0;
}
小结
set可理解为集合,是一个内部自动有序且不含重复元素的容器,有常用函数调用insert()、find()、erase()、size()、clear()常用于自动去重和暗生序排列
来源:CSDN
作者:qq_34767784
链接:https://blog.csdn.net/qq_34767784/article/details/103834806