`
cyw
  • 浏览: 31687 次
  • 来自: 广州
社区版块
存档分类
最新评论

C++STL泛型编程(一)——set

    博客分类:
  • STL
阅读更多

       2.4set集合容器
       set集合容器实现了红黑树(Red-Black Tree)的平衡二叉检索树的数据结构。
       在插入元素的时候,他会自动调整二叉树的排列,把该元素放到适当的位置,确保每一个子树根节点的键值大于左子树所有节点的数值,而小于右子树所有节点的键值;另,确保了根节点左子树的高度与右子树的高度相等,这样,二叉树的高度最小,从而检索速度最快。
       注意:他不会重复插入相同的键值的元素,类似于集合,采用了忽略处理。
       平衡二叉检索树的检索使用的是中序遍历算法。可理解平衡二叉检索树在插入元素时,就会自动的将元素按键值由小到大的顺序排列。
       构造set容器的主要目的就是为了快速检索。
 multiset(多重集合容器)、map(映照容器)、multimap(多重映照容器)的内部结构也是平衡二叉检索树。
       包含于头文件“#include<set>”
 
 1.创建set集合对象,要指定元素的类型      set<元素类型> 对象;


 2.元素的插入与中序遍历
 insert();元素的排列采用默认的比较规则,当然也可以自定义比较规则函数.
 使用前向迭代器对集合中序遍历,其结果正好是元素排序的结果。
#include<set>
#include<iostream>
using namespace std;

int main()
{
 //定义元素类型为int的集合对象s,当前没有任何元素
 set<int> s;

 //插入5个元素,但由于8有重复,第二次插入的8并没有执行
 s.insert(8);
 s.insert(1);
 s.insert(12);
 s.insert(6);
 s.insert(8);//第二次插入8,重复元素,不会插入

 //中序遍历集合中的所有元素
 set<int>::iterator it;//定义迭代器,前向的

 for(it=s.begin();it!=s.end();it++){
 
  cout << *it << " ";

 }
 cout << endl;
 return 0;
}

 

 3.元素的反向遍历
 使用反向遍历器reverse_iterator,可以反向遍历集合,输出结果正好是集合元素的反向排序的结果。
 他需要用到rbegin()和rend()两个方法,他们分别给出反向遍历的开始位置和结束位置。
#include<set>
#include<iostream>
using namespace std;

int main()
{
 //定义元素类型为int的集合对象s,当前没有任何元素
 set<int> s;

 //插入5个元素,但由于8有重复,第二次插入的8并没有执行
 s.insert(8);
 s.insert(1);
 s.insert(12);
 s.insert(6);
 s.insert(8);//第二次插入8,重复元素,不会插入

 //反向遍历集合中的所有元素
 set<int>::reverse_iterator rit;//定义反向迭代器

 for(rit=s.rbegin();rit!=s.rend();rit++){
 
  cout << *rit << " ";

 }
 cout << endl;
 return 0;
}

 

 4.元素的删除
 erase();删除的对象等于某一键值的元素.
  可以是 某个迭代器位置上的元素、一个区间的元素.
 clear();清空集合。
 size();输出集合的大小。
#include<set>
#include<iostream>
using namespace std;

int main()
{
 //定义元素类型为int的集合对象s,当前没有任何元素
 set<int> s;

 //插入5个元素,但由于8有重复,第二次插入的8并没有执行
 s.insert(8);
 s.insert(1);
 s.insert(12);
 s.insert(6);
 s.insert(8);//第二次插入8,重复元素,不会插入

 //删除键值为6的那个元素
 s.erase(6);

 //反向遍历集合中的所有元素
 set<int>::reverse_iterator rit;//定义反向迭代器

 for(rit=s.rbegin();rit!=s.rend();rit++){
 
  cout << *rit << " ";

 }
 cout << endl;
 //清空集合
 s.clear();
 //输出集合的大小,为0
 cout<< s.size()<<endl;
 return 0;
}

 

 5.元素的检索
 find();如果找到查找的键值,则返回该键值的迭代器位置;否则,返回最后一个元素的后面一个元素位置。即end();
#include<set>
#include<iostream>
using namespace std;

int main()
{
 //定义元素类型为int的集合对象s,当前没有任何元素
 set<int> s;

 //插入5个元素,但由于8有重复,第二次插入的8并没有执行
 s.insert(8);
 s.insert(1);
 s.insert(12);
 s.insert(6);
 s.insert(8);//第二次插入8,重复元素,不会插入

 //中序遍历集合中的所有元素
 set<int>::iterator it;//定义迭代器,前向的

 it=s.find(6);//查找键值为6的位置
 if(it!=s.end())
  cout<<*it<<endl;
 else
  cout << "Not find it!" << endl ;

 it=s.find(20);//查找键值为20的位置
 if(it!=s.end())
  cout<<*it<<endl;
 else
  cout << "Not find it!" << endl ;

 return 0;
}

 

 6.自定义比较函数
 默认,从小到大

 (1)若不是结构体,则要编写比较函数。
#include<set>
#include<iostream>
using namespace std;

//自定义比较函数Mycomp(),重载“()”操作符
struct myComp
{
 bool operator()(const int &a,const int &b)
 {
  if(a!=b)
   return a>b;
  else
   return a>b;//返回判断a>b的值,ture\false
 }
};//注意分号。

int main()
{
 //定义元素类型为int的集合对象s,当前没有任何元素
 //输入所采用的比较函数Mycomp
 set<int,myComp> s;

 //插入5个元素,但由于8有重复,第二次插入的8并没有执行
 s.insert(8);
 s.insert(1);
 s.insert(12);
 s.insert(6);
 s.insert(8);//第二次插入8,重复元素,不会插入

 //中序遍历集合中的所有元素
 set<int,myComp>::iterator it;//定义迭代器,前向的
 for(it=s.begin();it!=s.end();it++){
 
  cout << *it << " ";

 }
 cout << endl;

 return 0;
}

 (2)若是结构体,则在结构体内写入比较函数。

 

分享到:
评论

相关推荐

    Python课程设计 课设 手写数字识别卷积神经网络源码+文档说明.zip

    高分设计源码,详情请查看资源内容中使用说明 高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明高分设计源码,详情请查看资源内容中使用说明

    SpringBoot2.0快速开发框架权限.rar

    SpringBoot2.0快速开发框架权限.rarSpringBoot2.0快速开发框架权限.rarSpringBoot2.0快速开发框架权限.rar

    大语言模型的微调和推理baichuan7B, chatglm2-6B, Qwen-7B-chat源码.zip

    详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;

    基于Qt与STM32平台开发的汽车车机系统上位机

    基于Qt开发的汽车车机系统上位机 & 常见类型汽车传感器信号模拟发生器 任务和要求: 任务: 根据发动机测控系统信号需求,设计一套发动机信号模拟器人机交互系统,能够根据需要向下位机输出控制信号,使其输出发动机测控系统需要的传感器模拟信号,给发动机测控系统的开发提供方便。 要求: 1.设计应包含上位机与下位机的交互程序及人机交互界面的设计,与下位机设计相结合,使其能够实现全部类型发动机传感器信号的模拟输出及显示。 2.设计中需要采用模块化开发程序。 3.所设计的人机交互界面简洁合理。 4.应考虑所设计系统的实用性。 具体工作内容: 1.根据设计目标,查阅相关设计标准和设计方法资料,对发动机信号模拟器设计中的关键工程原理和工程方法进行提炼,并围绕关键问题进行国内外设计现状调研,开展分析、评价与总结,确定主要研究内容,制定设计技术路线,制定设计计划(周进度),撰写开题报告,并进行开题答辩,开题报告参考文献应不少于15篇(其中外文文献不少于 4 篇,近五年文献不少于三分之一)。 2.根据设计要求和技术指标,进行满足功能原理需求的多方案拟定,考虑安全、 标准等多因素进行技术性与经济性评价

    实验-三、数据库安全性(目的、要求和模板).doc

    实验-三、数据库安全性(目的、要求和模板).doc

    毕设绝技 - 4天玩乐完成商城系统完整资料day02

    文件为第二天视频教程 在毕业设计的挑战中,有时我们需要以极短的时间完成一个相对复杂的项目,比如一个商城系统。虽然时间紧迫,但只要我们合理规划、高效执行,完全有可能在4天内完成一个基础且功能完备的商城系统。 商城系统,也被称为网上商城系统或Online Mall system,是一种功能完善的网上销售系统。该系统主要包括产品发布、在线订购、在线支付、在线客服等功能模块,旨在为企业或个人提供一个在线销售平台,实现商品的展示、交易和客户服务。 商城系统具有多种核心功能,如商品管理、订单管理、用户管理和营销管理。商品管理功能支持商品的添加、编辑、删除、分类和搜索,满足商家对商品信息的全面管理需求。订单管理功能则涵盖订单的生成、支付、发货、退款和评价等环节,确保交易流程的顺畅进行。用户管理功能包括用户的注册、登录、个人信息管理和收货地址管理等,提升用户体验。而营销管理功能则通过促销活动的设置、优惠券的发放和积分兑换等手段,帮助商家提升销售业绩。 商城系统的特点主要体现在功能性、易用性和安全性上。商城系统注重功能性的开发,每个功能都有其发挥作用的地方,满足商家的实际需求。

    忻州师范学院-论文答辩PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    小型餐饮管理系统-数据库设计报告.doc

    小型餐饮管理系统-数据库设计报告.doc

    毕业设计+Python+基于OpenCV的交通路口红绿灯控制系统设计+Sqlite +PyCharm 1.zip.zip

    本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!! 本资源中的源码都是经过本地编译过可运行的,下载后按照文档配置好环境就可以运行。资源项目的难度比较适中,内容都是经过助教老师审定过的,应该能够满足学习、使用需求,如果有需要的话可以放心下载使用。有任何问题也可以随时私信博主,博主会第一时间给您解答!!

    西南交通大学-毕业答辩PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    2024年中国中空纤维膜行业研究报告.docx

    2024年中国中空纤维膜行业研究报告

    四川师范大学-PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    实验三、数据库安全性实验报告.doc

    实验三、数据库安全性实验报告.doc

    西北农林科技大学-PPT模板我给母校送模板作品.pptx

    PPT模板,答辩PPT模板,毕业答辩,学术汇报,母校模板,我给母校送模板作品,周会汇报,开题答辩,教育主题模板下载。PPT素材下载。

    java电子相册源码.rar

    java电子相册源码.rarjava电子相册源码.rarjava电子相册源码.rarjava电子相册源码.rar

    玉米脱粒机设计及其总装配图(论文、dwg图).rar

    玉米脱粒机设计及其总装配图(论文、dwg图)

    studyopencv2

    studyopencv2

    2024-2030全球与中国牛肉卷饼市场现状及未来发展趋势.docx

    2024-2030全球与中国牛肉卷饼市场现状及未来发展趋势

    在KITTI车辆数据集,采用随机多尺度变化增强车辆训练集样本数量,采用k-means聚类获取最优先验候选框大小

    在KITTI车辆数据集,采用随机多尺度变化增强车辆训练集样本数量,采用k-means聚类获取最优先验候选框大小,引入到YOLOv3模型中,提升模型的车辆检测精度和鲁棒性。.zip

    基于Vue+SSM高校疫情信息管理系统源码.zip

    详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;详情请查看资源内容中使用说明;

Global site tag (gtag.js) - Google Analytics