【PAT笔记】C++标准模板库STL(二)——set的用法和示例

2. set的常见用法详解

set翻译为集合,是一个内部自动有序不含重复的容器。如果要使用set,需要添加头文件#include <set> 另外还要加上using namespace std;

PAT中的相关题目有(代码见下方):

1063 Set Similarity (25 分)

2.1 set的定义

与vector类似,set的定义为set<typename> name,例如:set<int> name;

2.2 set容器内元素的访问

set只能通过迭代器(iterator)访问,迭代器格式与vector格式一致,为set<typename>::iterator it=st.begin(); 支持*it访问。

2.3 set常用函数

(1)insert():insert(x),将x插入set容器中,并自动递增去重。示例:st.insert(1);

(2)find():find(value)返回set中对应值为value的迭代器。示例:set<int>::iterator it=st.find(2);在set找到2返回迭代器。

(3)erase():删除set中单个元素或者区间元素。示例:st.erase(2)或者st.erase(it,st.end());删除元素2到set末尾的元素。

(4)size():size()用来获得set元素的个数。示例:st.size();。

(5)clear():用来清空set中的所有元素。示例:st.clear()。

现在附上PAT中关于set题目的代码: 

#include <stdio.h>
#include <set>
#include <iostream>
using namespace std;
const int N=51;
set<int> st[N];

void compare(int a,int b){
	int totalNum=st[b].size(),sameNum=0;  //totalNum为新的元素 
	for(set<int>::iterator it=st[a].begin();it!=st[a].end();it++){  //it和st[a].end()不能用<或>
		if(st[b].find(*it)!=st[b].end()) sameNum++;  //存在这个数,注意判断方法 
		else totalNum++; 
	}
	printf("%.1f%%\n",sameNum*100.0/totalNum);  //100.0要乘在分子上,不能乘在分母上 
}

int main(){
	int n,m,k,x,y,z;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&m);
		for(int j=0;j<m;j++){
			scanf("%d",&k);
			st[i].insert(k);
		}
	}
	scanf("%d",&x);
	for(int i=0;i<x;i++){
		scanf("%d%d",&y,&z);
		compare(y,z);
	}
	return 0;

猜你喜欢

转载自blog.csdn.net/xt199711/article/details/87305250