当前位置:首页 » 《随便一记》 » 正文

c++ set用法 入门必看 超详细

1 人参与  2023年03月30日 11:45  分类 : 《随便一记》  评论

点击全文阅读


1、set的作用
set就是集合的意思,集合的特点就是不会出现重复的内容。一般用来作查重或去重操作,举个场景,给出一个表:

姓名爱好
小明打篮球
小刚画画
小明听音乐
问该表中出现了多少个人,学会了set,就可以很轻松地解决这个问题

2、set的定义
set<储存的类型> 容器名
如:
储存int型的值 set<int> s;
储存double型的值 set<double> s;
储存string型的值 set<string> s;
储存结构体或者类的值的值 set<结构体名> s;

(1)set的一些基本的成员函数

//常用函数(必学)insert()//插入元素count()//判断容器中是否存在某个元素size()//返回容器的尺寸,也可以元素的个数erase()//删除集合中某个元素clear()//清空集合empty()//判断是否为空begin()//返回第一个节点的迭代器end()//返回最后一个节点加1的迭代器rbegin()//反向迭代器rend()//反向迭代器//功能函数(进阶)find()//查找某个指定元素的迭代器lower_bound()//二分查找第一个不小于某个值的元素的迭代器get_allocator()//返回集合的分配器swap()//交换两个集合的变量max_size()//返回集合能容纳元素的最大限值

代码:

#include<iostream>//c++标准头文件,可以使用cout,cin等标准编译用法#include<set>//使用set需要带上这个文件using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用int main(){set<int> s;//定义 s.insert(1);//插入元素1 s.insert(3);//插入元素3s.insert(2);//插入元素2cout<<"现有的元素有"<<endl; for(int c:s){//遍历set,注意set会将元素自动排序,插入的顺序是1、3、2,遍历的顺序是1、2、3 cout<<c<<' ';} cout<<endl;cout<<endl;s.erase(3);//删除元素3cout<<"删除元素3后,现有的元素有"<<endl; for(int c:s){//遍历set,注意set会将元素自动排序,插入的顺序是1、3、2,遍历的顺序是1、2、3 cout<<c<<' ';} cout<<endl;cout<<endl;cout<<"现在s.size()=="; cout<<s.size();cout<<",即有两个元素" ;cout<<endl;cout<<endl;cout<<"是否包含元素2:"<<endl;cout<<"s.count(2)=="<<s.count(2)<<"即包含元素2"; cout<<endl;cout<<endl;cout<<"是否包含元素3:"<<endl;cout<<"s.count(3)=="<<s.count(3)<<"即不包含元素3"; cout<<endl;cout<<endl;cout<<"s是否是空的:"<<endl;cout<<"s.empty()=="<<s.empty()<<"即s不为空"; cout<<endl;cout<<endl;s.clear();//清空集合 cout<<"s是否是空的:"<<endl;cout<<"s.empty()=="<<s.empty()<<"即s是空的"; cout<<endl;cout<<endl;cout<<"s是否是空的:"<<endl;cout<<"s.size()=="<<s.size()<<"即s是空的"; //s.size()==0也可以判断集合是否为空,为了考虑代码可读性,一般不用size()代替empty() cout<<endl;cout<<endl;} 

运行结果:

现有的元素有1 2 3删除元素3后,现有的元素有1 2现在s.size()==2,即有两个元素是否包含元素2:s.count(2)==1即包含元素2是否包含元素3:s.count(3)==0即不包含元素3s是否是空的:s.empty()==0即s不为空s是否是空的:s.empty()==1即s是空的s是否是空的:s.size()==0即s是空的

3、set的两种遍历方法

(1)迭代器iterator
代码:

#include<iostream>#include<set>using namespace std;int main(){set<int> s;//定义 s.insert(1);//插入元素1 s.insert(3);//插入元素3s.insert(2);//插入元素2set<int>::iterator it;//使用迭代器for(it=s.begin();it!=s.end();it++){cout<<*it<<' ';} } 

运行结果:

1 2 3

set有一个很重要的特性,那就是自动升序排序,在很多场景可以方便使用,那么当需要降序排序的时候需要怎样呢?
1、逆向思维
从end()-1到begin()遍历就是降序的了

#include<iostream>#include<set>using namespace std;int main(){set<int> s;//定义 s.insert(1);//插入元素1 s.insert(3);//插入元素3s.insert(2);//插入元素2set<int>::iterator it;//使用迭代器for(it=--s.end();it!=--s.begin();it--){cout<<*it<<' ';} } 

运行结果:

3 2 1

2、rbegin()和rend()
逆向迭代器本来就是实现逆向迭代的功能的,下面看用法

#include<iostream>#include<set>using namespace std;int main(){set<int> s;//定义 s.insert(1);//插入元素1 s.insert(3);//插入元素3s.insert(2);//插入元素2set<int>::reverse_iterator it;//使用反向迭代器for(it=s.rbegin();it!=s.rend();it++){cout<<*it<<' ';} } 

运行结果:

3 2 1

(2)foreach遍历

#include<iostream>#include<set>using namespace std;int main(){set<int> s;//定义 s.insert(1);//插入元素1 s.insert(3);//插入元素3s.insert(2);//插入元素2for(auto it:s){cout<<it<<' ';} } 

运行结果:

1 2 3

这种写法简单易记,但是不能实现降序遍历

课外知识
auto用法,c++auto用法强大,当你无法确定变量的类型时,都可以用auto来代替,迭代器iterator很难记住,其实可以用auto来代替:

#include<iostream>#include<set>using namespace std;int main(){set<int> s;//定义 s.insert(1);//插入元素1 s.insert(3);//插入元素3s.insert(2);//插入元素2for(auto it=s.begin();it!=s.end();it++){cout<<*it<<' ';} } 

运行结果:

1 2 3

是不是很简单呢?

刚接触肯定会觉得难,多些做题多些用,熟悉了就容易了,兄弟萌,加油!!!

文章尚有不足,欢迎大牛们指正

感谢观看,点个赞吧


点击全文阅读


本文链接:http://zhangshiyu.com/post/57285.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 祖母寿宴,侯府冒牌嫡女被打脸了(沈屿安秦秀婉)阅读 -
  • 《雕花锦年,昭都旧梦》(裴辞鹤昭都)完结版小说全文免费阅读_最新热门小说《雕花锦年,昭都旧梦》(裴辞鹤昭都) -
  • 郊区41号(许洛竹王云云)完整版免费阅读_最新全本小说郊区41号(许洛竹王云云) -
  • 负我情深几许(白诗茵陆司宴)完结版小说阅读_最热门小说排行榜负我情深几许白诗茵陆司宴 -
  • 九胞胎孕妇赖上我萱萱蓉蓉免费阅读全文_免费小说在线看九胞胎孕妇赖上我萱萱蓉蓉 -
  • 为保白月光,侯爷拿我抵了债(谢景安花田)小说完结版_完结版小说全文免费阅读为保白月光,侯爷拿我抵了债谢景安花田 -
  • 陆望程映川上官硕《我的阿爹是带攻略系统的替身》最新章节阅读_(我的阿爹是带攻略系统的替身)全章节免费在线阅读陆望程映川上官硕
  • 郑雅琴魏旭明免费阅读_郑雅琴魏旭明小说全文阅读笔趣阁
  • 头条热门小说《乔书意贺宴临(乔书意贺宴临)》乔书意贺宴临(全集完整小说大结局)全文阅读笔趣阁
  • 完结好看小说跨年夜,老婆初恋送儿子故意出车祸_沈月柔林瀚枫完结的小说免费阅读推荐
  • 热推《郑雅琴魏旭明》郑雅琴魏旭明~小说全文阅读~完本【已完结】笔趣阁
  • 《你的遗憾与我无关》宋怀川冯洛洛无弹窗小说免费阅读_免费小说大全《你的遗憾与我无关》宋怀川冯洛洛 -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1