C++:关联式容器set的介绍

news2024/12/23 10:28:08

1、set的介绍

  • set是按照一定次序存储元素的容器
  • 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。
  • set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。
  • 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。
  • set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。
  • 在底层是用二叉搜索树(红黑树)实现的

 

  • T: set中存放元素的类型,实际在底层存储<value, value>的键值对。
  • Compare:set中元素默认按照小于来比较
  • Alloc:set中元素空间的管理方式,使用STL提供的空间配置器管理

 

 2、set的初始化 

2.1、方法1 

set<int> first;                              // empty set of ints

2.2、方法2

int myints[] = { 10,20,30,40,50 };
set<int> second(myints, myints + 5);        // range

2.3、方法3

// 拷贝构造
set<int> third(second);                  // a copy of second

 2.4、方法4 

// 迭代器
set<int> fourth(second.begin(), second.end());  // iterator ctor.

3、 set的常用内置函数使用 

3.1迭代器

set<int> v = { 1,2,3,4,5,6,7 };
	//Iterators(迭代器)
	v.begin();          //获取第一个数的位置
	v.end();            //获取最后一个数的位置
	v.rbegin();         //获取最后一个数的位置
	v.rend();           //获取第一个数的位置

3.2容量

set<int> v = { 1,2,3,4,5,6,7 }; 
    //Capacity(容量)
	v.size();           //获取v数据的个数
	v.max_size();       //返回字符串可以达到的最大长度
	v.empty();          //判断v是否为空

 3.3修改器

set<int> v = { 1,2,3,4,5,6,7 };
set<int> v1 = { 10,20,30 };
int arr[] = {100,200,300};
	//Modifiers(修改器)
	v.insert(90);                  //插入元素
	v.insert(v.begin(), 100);     //在pos前插入元素
	v.insert(arr,arr+3);
	
	v.erase(v.begin());           //删除set中position位置上的元素
	v.erase(1);                   //删除set中值为x的元素,返回删除的元素的个数
	v.erase(v.begin(), v.end());  //删除set中[first, last)区间中的元素

	v.clear();                    //检测set是否为空,空返回true,否则返回true
	v.swap(v1);                   //交换

 3.4操作

set<int> v = { 1,2,3,4,5,6,7 };
    //operations(操作)
    iterator find(constkey_type & x) const;
    v.find(1);                                  //返回set中值为x的元素的迭代器位置
    v.count(1);                                 //返回set中值为x的元素的个数

4、set的遍历

4.2迭代器 

set<int> v = { 1,2,3,4,5,6,7 };
	set<int>::iterator it = v.begin();
	while (it != v.end())
	{
		cout << *it << " ";
		++it;
	}
	cout << endl;

4.3范围for 

set<int> v = { 1,2,3,4,5,6,7 };
	for (auto e : v)
	{
		cout << e << " ";
	}

总结 

  • set与map/multimap不同,map/multimap中存储的是真正的键值对<key, value>,set中只放 value,但在底层实际存放的是由<value, value>构成的键值对。
  • set中插入元素时,只需要插入value即可,不需要构造键值对。
  • set中的元素不可以重复(因此可以使用set进行去重)。
  • 使用set的迭代器遍历set中的元素,可以得到有序序列
  • set中的元素默认按照小于来比较
  • set中查找某个元素,时间复杂度为:log2n
  • set中的元素不允许修改(为什么?)
  • set中的底层使用二叉搜索树(红黑树)来实现

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153228.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

xmind2testcase使用与二次开发

xmind2testcase安装、简单二次开发与使用说明&#xff1a; 添加xmind文件备份 重构生成CSV文件 preview预览页面数据显示重构 一、安装 1.xmind2testcase安装 pip install xmind2testcase 2.启动服务 进入默认位置&#xff1a;C:\Users\dell\AppData\Roaming\Python\Py…

医院能耗管控平台,医院节能降耗的有效利器

随着人们对医院舒适度要求的不断提升&#xff0c;医院采用新技术及信息化建设等手段来提升服务&#xff0c;导致能源使用效率高&#xff0c;医院能耗管控平台可以帮助医院在运行的基础上&#xff0c;促进医院节能降耗等工作。 医院目前存在的问题 1、医院人口密度大、用能系统…

2023年05月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 运行以下程序&#xff0c;如果通过键盘先后输入的数是1和3&#xff0c;输出的结果是&#xff1f;&#xff08; &#x…

springweb flux拦截请求获取参数和方法做接口签名防重放校验

在给spring webflux做接口签名、防重放的时候&#xff0c;往往需要获取请求参数&#xff0c;请求方法等&#xff0c;而spring webflux无法像spring mvc那样好获取&#xff0c;这里根据之前的实践特地说明一下&#xff1a; 总体思路&#xff1a; 1、利用过滤器&#xff0c;从原…

Yuhan Blu-ray DVD Creator for Mac: 打造专属的高清视听盛宴

在如今的高清时代&#xff0c;谁能拒绝一款能够轻松将高清影片刻录成蓝光DVD的刻录机呢&#xff1f;而Yuhan Blu-ray DVD Creator for Mac正是这样一款令人惊艳的软件。 作为一款专为Mac用户打造的蓝光DVD刻录机&#xff0c;Yuhan Blu-ray DVD Creator for Mac支持将各种高清视…

涛思数据与胜软科技达成战略合作,共同赋能石油行业数字化转型

近日&#xff0c;北京涛思数据科技有限公司&#xff08;以下简称“涛思数据”&#xff09;与山东胜软科技股份有限公司&#xff08;以下简称“胜软科技”&#xff09;于山东东营签署战略合作协议。双方围绕石油行业数字化转型趋势&#xff0c;合力打造石油行业数字化转型解决方…

设计模式_观察者模式

观察者模式 介绍 设计模式定义案例问题堆积在哪里解决办法观察者是行为型设计模式 多个对象 观察 1个对象小强考试完 成绩公布了 家长/同学得知成绩后 做出不同反应一个一个通知很麻烦 先通知谁 也有讲究的 信息发布方 抽象出一个信息管理类 负责管理监听者 类图 代码 Obse…

【Apache Flink】Flink DataStream API的基本使用

Flink DataStream API的基本使用 文章目录 前言1. 基本使用方法2. 核心示例代码3. 完成工程代码pom.xmlWordCountExample测试验证 4. Stream 执行环境5. 参考文档 前言 Flink DataStream API主要用于处理无界和有界数据流 。 无界数据流是一个持续生成数据的数据源&#xff0…

如何理解 Spring Boot 中的 Starter?

Starter 是 Spring Boot 的四大核心功能特性之一&#xff0c;除此之外,Spring Boot 还有自动装配、Actuator 监控等特性。Spring Boot 里面的这些特性&#xff0c;都是为了让开发者在开发基于 Spring 生态下的企业级应用时&#xff0c;只需要关心业务逻辑&#xff0c;减少对配置…

初识FFmpeg

前言 无意间见到群里的小伙伴展示视频工具。功能比较多&#xff0c;包括视频编码修改&#xff0c;画质处理&#xff0c;比例处理、名称提取&#xff0c;剪辑、标题拆解。因此开始了FFmpeg学习。以下摘自百度百科的解释。 FFmpeg是一套可以用来记录、转换数字音频、视频&#xf…

【LVS实战】02 搭建一个LVS-NAT实验

一、网络结构 用虚拟机搭建如下的几台机器&#xff0c;并配置如下的ip 关于虚拟机网卡和网络的配置&#xff0c;可以参考 iptables章节&#xff0c;05节&#xff1a;网络转发实验 主机A模拟外网的机器 B为负载均衡的机器 C和D为 RealServer 二、C和D主机的网关设置 C和D机…

vue项目引入elementui样式组件05

vue前端开发&#xff0c;关于样式部分&#xff0c;不需要自己去写&#xff0c;可以引用现有的一些组件&#xff0c;比如elemtnui&#xff0c;可官网查看 1、下载对应的包到vue项目中 通过npm进行安装 npm i element-ui -S2、引入到项目中&#xff0c;官网也提供了例子 3、运…

Shopee流量和销量不佳?或许你没有掌握正确的引流方法

很多卖家做了很久&#xff0c;但是发现流量和销量都没怎么增长&#xff0c;今天陈哥就分享一下如何正确的引流。 以下是一些有效的引流策略&#xff1a; 1. 站内引流&#xff1a;选择高性价比的潮流商品&#xff0c;根据目标客户群和重点品类进行选品。优化商品名称和描述&am…

顺序表练习

顺序表练习 图解插入与删除&#xff0c;详见相关内容&#xff1a;顺序存储结构的插入与删除 //顺序表的定义、创建、插入、删除、查找 //定义&#xff1a;结构体中数组、表长 //创建:输入元素&#xff0c;表长 //插入&#xff1a;判断表是否已满、判断位序合法性 //插入位序k…

好用的视频下载工具推荐

我不允许还有人不知道这款视频下载工具, 真的太好用了! &#xff01;! 随着视频行业的崛起&#xff0c;如今网络上各种各样的视频层出不穷, 那我们看到喜欢的视频该如何下载呢&#xff1f;今天小编来给大家分享一款非常实用的视频下载工具——Downni, 它兼容国内外大多数视频网…

网络编程服务端与客户端存在的端口问题

服务端的窗口不能再次使用的原因如下&#xff1a; 服务器端的窗口不能再次使用的原因可能有以下几点&#xff1a; 1. 窗口已经关闭&#xff1a;如果服务器端的窗口已经被关闭&#xff0c;那么就无法再次使用。关闭窗口后&#xff0c;服务器会释放相关资源&#xff0c;包括与该…

深度学习入门(二)之神经网络

文章目录 从感知机到神经网络神经网络的例子复习感知机激活函数 激活函数sigmoid函数阶跃函数的实现阶跃函数的图形sigmoid函数的图形sigmoid函数与阶跃函数比较非线性函数ReLU函数 多维数组的运算多维数组矩阵乘法神经网络的内积 三层神经网络的实现符号确认各层间信号传递的实…

视频剪辑达人教您:如何运用嵌套合并技巧制作固定片尾

在视频剪辑的过程中&#xff0c;嵌套合并技巧是一种非常实用的技术&#xff0c;可以帮助您将多个素材叠加在一起&#xff0c;制作出更加丰富多彩的视频。本文将由视频剪辑达人为您详细介绍如何运用云炫AI智剪嵌套合并技巧制作固定片尾&#xff0c;让您的视频剪辑水平更上一层楼…

场景交易额超40亿,海尔智家三翼鸟开始收获

文 | 螳螂观察 作者 | 余一 随着双十一的到来&#xff0c;国内的消费情绪再次被点燃。在这类大促之下&#xff0c;品牌们就像一个个天体&#xff0c;不断引动着市场潮汐&#xff0c;期待自己能触发更大的“海潮效应”。 所谓“海潮效应”是指&#xff0c;海水因天体的引力而…

总结之数据分析工具cube.js通过Docker部署

cube.js介绍 官网地址&#xff1a;https://cube.dev/ Cube.js是一个开源的模块化框架&#xff0c;用于构建分析web应用程序。它主要用于构建内部业务智能工具或向现有应用程序添加面向客户的分析。 Cube.js设计用于无服务器查询引擎&#xff0c;如AWS Athena和谷歌BigQuery。…