栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++学习-浅谈set

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++学习-浅谈set

1.1 简单的介绍

set是C++STL库里的一种容器(或者“个”?),便于用户对一个数组进行去重等操作,常用于去重或做不可重集等用法,对于数据量较大时的去重,set可谓是不错的选择。

1.2 set的定义
set<数据类型> set名;
例如
set s;

这样就定义好了一个int类型的set。

1.3 set的使用

以下是set的基础用法(有错欢迎指出)

set.begin(); // set的首地址,常用于迭代器
set.end(); // set尾地址后的一位的地址,常用于迭代器
set.insert(num); // 在set中加入某个元素,切记不是插入,因为set是一个集合而不是线性表之类的东西
set.erase(num); // 直接删除num这个元素
set.erase(l,r); // 删除set中l到r区间内的所有元素(基于迭代器)
set.find(num); // 查找num这个元素,返回地址,如果没有应该是返回一个空指针之类的
set.size(); // 返回set内元素的个数
set.empty(); // 返回一个bool,如果set为空返回1,否则返回0
set.clear(); // 清空set
1.4 set的迭代器

想挨个访问或访问指定元素(set里的元素),必须使用迭代器,还是那句话,set是容器、集合,不是线性表,所以没有下标(可以去学学链式前向星)
以下是set定义迭代器和使用迭代器访问set元素的方法

set<数据类型(必须与要访问的set类型一致)>::iterator 迭代器名;
例如
set s;
set::iterator it;
for(int i=1;i<=10;i++) set.insert(i);
for(it=s.begin();it!=s.end();it++){
	cout<<*it<<"n"; // 输出set中的it地址的元素
}
2.1 例题演示

明明的随机数
很经典的题,要求完成去重与排序两个操作,先演示普通做法

#include
#include
#include
using namespace std;
const int MAXN=108
int n,tmp,maxn=-1;
bool a[MAXN];
int main(){
	cin>>n;
	while(n--){
		cin>>tmp;
		if(a[tmp]==0) a[tmp]=1; // 用flag数组打标记完成去重
		maxn=max(maxn,tmp); // 记录边界值
	}
	for(int i=0;i<=maxn;i++){
		if(a[i]==1){
			cout< 

当然,桶的做法局限性很大,数据范围但凡是10000个小于等于1e9的数,那么桶就直接pass掉了
接下来是万能的set做法STL赛高

#include
#include
#include
using namespace std;
set s;
set::iterator it;
int n,tmp;
int main(){
	cin>>n;
	while(n--){
		cin>>tmp;
		s.insert(tmp);
	}
	for(it=s.begin();it!=s.end();it++){
		cout<<*it<<" ";
	}
	return 0;
}

与桶相比是不是简单多了呢?

2.2 set的内部排序

如果你想把set降序排序或升序排序,必须在定义时予以设定

bool cmp(int x,int y){
	return x>y; // 降序,反之升序x s; // 一样的道理,比较函数与set数据类型保持一致
3.1 结尾

以上就是set的基本用法啦,如果你觉得这篇博文还阔以的话不妨点个赞qwq
感谢小主看到这里~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/882920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号