Contest100000597 - 《算法笔记》6.2小节——C++标准模板库(STL)介绍->set的常见用法详解

蓝咒 提交于 2020-01-04 21:14:42

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()常用于自动去重和暗生序排列

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!