下载此文档

C++STLset容器常用用法.pdf


文档分类:IT计算机 | 页数:约6页 举报非法文档有奖
1/6
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/6 下载此文档
文档列表 文档介绍
该【C++STLset容器常用用法 】是由【小小布】上传分享,文档一共【6】页,该文档可以免费在线阅读,需要了解更多关于【C++STLset容器常用用法 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。C++STLset容器常⽤⽤法
set是STL中⼀种标准关联容器。它底层使⽤平衡的搜索树——红⿊树实现,插⼊删除操作时仅仅需要指针操作节点即可完成,不涉及到内
存移动和拷贝,所以效率⽐较⾼。set,顾名思义是“集合”的意思,在set中元素都是唯⼀的,⽽且默认情况下会对元素⾃动进⾏升序排
列,⽀持集合的交(set_intersection),差(set_difference)并(set_union),对称差(set_symmetric_difference)等⼀些集合上的操作,如
果需要集合中的元素允许重复那么可以使⽤multiset。
⽤操作
使⽤时注意包含头⽂件<set>std::setandstd::multisetassociativecontainers
() 返回set容器的第⼀个元素
() 返回set容器的最后⼀个元素
()删除set容器中的所有的元素
() 判断set容器是否为空
()插⼊⼀个元素
()删除⼀个元素
() 返回当前set容器中的元素个数
set模板原型://Key为元素(键值)类型
template<classKey,classCompare=less<Key>,classAlloc=STL_DEFAULT_ALLOCATOR(Key)>

#include<iostream>
#include<set>
#include<functional>
usingnamespacestd;
set<int>s;
intmain(){
set<int>seta;//默认是⼩于⽐较器less<int>的set
set<int,greater<int>>setb;//创建⼀个带⼤于⽐较器的set,需包含头⽂件functional
inta[5]={1,2,3,4,5};
set<int>setc(a,a+5);//数组a初始化⼀个set;
set<int>setd((),());//setc初始化⼀个set
//上述两例均为区间初始化
set<int>sete(setd);//拷贝构造创建set
return0;
}

①插⼊
#include<iostream>
#include<set>
usingnamespacestd;
set<int>s;
voidsetprint(intcnt){
cout<<"Testoutput:"<<cnt<<":"<<endl;
for(set<int>::iteratorit=();it!=();it++)
cout<<*it<<"";
puts("");
return;
}
intmain(){
intcnt=1;
(1);
(2);
(5);
setprint(cnt++);
(2);//set只允许⽤⼀个值出现⼀次,要插⼊相同元素请⽤multiset
setprint(cnt++);
inta[4]={11,12,13,14};
(a,a+4);//将区间[a,a+4]⾥的元素插⼊容器
setprint(cnt++);
return0;
}
②删除
()删除⼀个元素
()删除set容器中的所有的元素
#include<iostream>
#include<set>
usingnamespacestd;
set<int>s;
voidsetprint(intcnt){
cout<<"Testoutput:"<<cnt<<":"<<endl;
for(set<int>::iteratorit=();it!=();it++)
cout<<*it<<"";
puts("");
return;
}
intmain(){
intcnt=1;
for(inti=1;i<11;i++){
(i);
}
setprint(cnt++);
(9);//根据元素删除
setprint(cnt++);
set<int>::iteratorita=();
set<int>::iteratoritb=();
(ita);//删除迭代器指向位置的元素
setprint(cnt++);
ita=();
itb=();
itb++;itb++;
(ita,itb);//删除区间[ita,itb)的元素
setprint(cnt);
();
return0;
}
③修改
不能直接修改容器内数据,所以只能删除某元素再插⼊要修改的数值。
④查找
()查找⼀个元素,如果容器中不存在该元素,()
#include<iostream>
#include<set>
usingnamespacestd;
set<int>s;
voidsetprint(intcnt){
cout<<"Testoutput:"<<cnt<<":"<<endl;
for(set<int>::iteratorit=();it!=();it++)
cout<<*it<<"";
puts("");
return;
}
intmain(){
intcnt=1;
(1);
(2);
(5);
setprint(cnt++);
if((2)!=())
cout<<"2isexistent"<<endl;
else
cout<<"2isnon-existent"<<endl;
if((3)==())
cout<<"3isnon-existent"<<endl;
else
cout<<"2isexistent"<<endl;
return0;
}
⽤操作

()返回第⼀个⼤于或等于给定关键值的元素
()返回第⼀个⼤于给定关键值的元素
()返回⼀对定位器,分别表⽰第⼀个⼤于或等于给定关键值的元素和第⼀个⼤于给定关键值
的元素,这个返回值是⼀个pair类型,如果这⼀对定位器中哪个返回失败,就会等于
()
#include<iostream>
#include<set>
usingnamespacestd;
intmain(){
set<int>s;
(1);
(2);
(5);
cout<<"lower_bound&upper_boundtest:"<<endl;
cout<<"第⼀个⼤于或等于3的元素:"<<*(3)<<endl;
cout<<"第⼀个⼤于或等于2的元素:"<<*(2)<<endl;
cout<<"第⼀个⼤于2的元素:"<<*(2)<<endl;
cout<<"equal_rangetest:"<<endl;
cout<<"第⼀个⼤于或等于2的元素:"<<*(2).first<<endl;
cout<<"第⼀个⼤于2的元素:"<<*(2).second<<endl;
return0;
}
②判断元素是否在set中&判断set是否为空
#include<iostream>
#include<set>
#include<functional>
usingnamespacestd;
intmain(){
set<int>s;
if(())cout<<"容器为空"<<endl;
(1);
if(!())cout<<"容器不为空"<<endl;
if((1))cout<<"1在容器中"<<endl;
if(!(2))cout<<"2不在容器中"<<endl;
return0;
}
③⾃定义⽐较函数
#include<iostream>
#include<set>
#include<functional>
usingnamespacestd;
structcmp{
booloperator()(constint&a,constint&b){
returna>b;
}
};
set<int,cmp>s;//⾃定义排序函数构造set
voidsetprint(intcnt){
cout<<"Testoutput:"<<cnt<<":"<<endl;
for(set<int,cmp>::iteratorit=();it!=();it++)
cout<<*it<<"";
puts("");
return;
}
intmain(){
(1);
(2);
(6);
setprint(1);
return0;
}
以上就是刷题必备的set⽤法,熟练掌握,要⽤时别⽤错就成。
⾄于求并、交、差、对称差等操作,暂不细说,使⽤时要包含头⽂件”algorithm”。
此外还有unordered_set和unordered_multiset,为set和multiset的⽆序版,使⽤时要包含头⽂件”unordered_set”。

C++STLset容器常用用法 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数6
  • 收藏数0 收藏
  • 顶次数0
  • 上传人小小布
  • 文件大小266 KB
  • 时间2022-11-21