stl整理——set

set

set是STL中一种常用的容器,关于set,必须说明的是set关联式容器。 set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序(默认升序,字典序)。

首先引用set需要头文件#include<set>

对于set的操作大致有以下几种:

set<int> s    定义一个set容器 类型为int型
s.begin()     返回指向第一个元素的迭代器
s.clear()     清除所有元素
s.count()     返回bool型,有返回1,无返回0
s.empty()     如果集合为空,返回true
s.end()       返回指向最后一个元素之后的迭代器,不是最后一个元素
s.erase()     删除集合中的元素
s.find()      返回一个指向被查找到元素的迭代器,如果没找到则返回end()
s.insert()    在集合中插入元素
s.size()      集合中元素的数目
s.swap()      交换两个集合变量

遍历set的用法,以及详细操作大家可以参考一下这位聚聚的博客,写的非常详细呀!!orz
https://blog.csdn.net/byn12345/article/details/79523516?ops_request_misc=&request_id=&biz_id=102&utm_term=c++%25E5%25A6%2582%25E4%25BD%2595%25E9%2581%258D%25E5%258E%2586set&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-6-79523516.first_rank_v2_pc_rank_v29

来看一道很经典的题目
在这里插入图片描述
题意:给出 n个数,找到尽量长的一个序列,使得该序列中没有重复的元素

思路:对于该类段查找问题可以采用经典的滑动窗口方法,即维护一个窗口,窗口的左右边界用两个变量L,R代表,先增加R直到出现重复数字,再增加L,再增加R,直到R达到n

首先分析一下样例,如果下一个数字在set中出现过,那我们就移动L一直到L到R之间的元素都不和下一个数字相同。
在这里插入图片描述

代码如下

#include<iostream>
#include<set>
using namespace std;
set<int>s;
int a[1234567];
int main() {
	int n;
	scanf("%d", &n);
	while (n--) {
		s.clear();
		int t;
		scanf("%d", &t);
		for (int i = 1; i <= t; i++)scanf("%d", &a[i]);
		int l = 1, r = 1, res = 0;
		while (r <= t)
		{
			while (r <= t && !s.count(a[r]))s.insert(a[r++]);
			res = max(res, r - l);
			s.erase(a[l++]);
		}
		printf("%d\n", res);
	}
}

再来一道与字符串的结合

在这里插入图片描述
题目大意:安迪想整个字典,结果认识的字太少,现在给你一段英文句子,把里面不同的单词存起来,按小写的字典序输出。

#include <iostream>
#include<string>
#include <set>
#include <cstdio>
using namespace std;
set<string>se;
string op;

int main() {
	char ch;
	while ((ch = getchar())!=EOF) {
		if (!isalpha(ch))continue;//也可以用isspace()判断是不是空格
		while (isalpha(ch)) {
			op += tolower(ch);
			ch = getchar();
		}
		se.insert(op);
		op.clear();//每次插入之后就清空一下op
	}
	set<string>::iterator it = se.begin();//定义迭代器遍历
	for (it = se.begin(); it != se.end(); it++) {
		
		cout << *it << endl;//迭代器代表的是他所指的地址,所以我们输出时要指向这个地址
   
	}

}

里面用到了几个陌生的函数

isalpha() // 用来判断读入的字符是不是字母(不区分大小写)
tolower()//将大写字母转化为小写字母

好啦set就到这啦

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值