C++set学习笔记
1. 定义
set需头文件<set>,是有序关联容器(红黑树实现),存储唯一不重复元素,自动按升序排列(默认<比较)。
2. 基本用法
定义:
set<T> name; //默认升序
set<T,greater<T>> name;//降序
T为元素类型,name为 set 名称。
初始化:
//方式1:默认构造(空set)
set<int>s1;//方式2:初始化列表(C++11+,自动去重排序)
set<int>s2={3,1,4,1,5};//最终{1,3,4,5}//方式3:拷贝构造
set<int>s3(s2);//方式4:自定义降序
set<int,greater<int>>s4={3,1,4};//最终{4,3,1}
3. 核心成员函数
(1)插入与删除
//插入:成功返<迭代器,true>,失败返<迭代器,false>
s1.insert(2);
s1.insert({5,3,7});//删除:按值/迭代器/范围
s1.erase(3); //按值删,返1(成功)/0(失败)
s1.erase(s1.begin()); //按迭代器删(首元素)
s1.erase(s1.begin(),s1.find(5));//按范围删[begin,find(5))//清空
s1.clear();//清空后size=0
(2)查找与统计
//查找:存在返迭代器,不存在返end()
auto it=s2.find(4);
if(it!=s2.end())cout<<"找到:"<<*it<<endl;//输出4//统计:仅返1(存在)/0(不存在)
int cnt=s2.count(1);//cnt=1
int cnt2=s2.count(2);//cnt2=0
(3)状态查询
//大小
cout<<"size:"<<s2.size()<<endl;//输出4//判空
if(s1.empty())cout<<"s1空"<<endl;//首尾元素(迭代器)
cout<<"首元素:"<<*s2.begin()<<endl;//1
cout<<"尾元素:"<<*s2.rbegin()<<endl;//5
遍历可以使用
for(auto i:name)
