当前位置: 首页 > news >正文

setmap使用

目录

set使用

set的模板参数

构造函数

成员函数 insert

iterator

​编辑 

 

find

count

pair

pair 的模板参数

make_pair

multiset使用

multiset 的模板参数

set 与 multiset 的区别

count 

map使用

map 的模板参数

构造函数

insert

iterator

find

​编辑 

count

operator[]

multimap使用

multimap与map 的区别


set使用

set的模板参数

set 是一个 key 模式的结构,底层使用的是红黑树。

set 可以给一个类型,由于底层使用的是红黑树,所以 key 一定要支持比较,所以还有一个 compare的模板参数,这里可以给仿函数类型,还有一个就是空间配置器,空间配置器我们不多说。

构造函数

 构造函数,我们常用的就是一个空的构造,或者是用一段迭代器区间来构造。

	vector<int> v{ 1,2,3,4,5,6,7,8,9 };set<int> se(v.begin(), v.end());

这样就构造好了,当然任何迭代器都可以。

那么我们遍历一下。

	for (auto e : se)cout << e << " ";cout << endl;

这里我想应该都能看明白,范围for,也就是底层使用的是迭代器替换。

实际上我们的迭代器遍历一遍也就类似于中序。

其实这里并不是我们给的有序然后才有序的,这里即使是无序,经过set后也是有序的。

	vector<int> v{ 2,3,1,8,3,2,9,9,4,0,3,4,6,7,6,6,6,2 };set<int> se(v.begin(), v.end());for (auto e : se)cout << e << " ";cout << endl;

 我们给这么一段数据,我们再看一下。

经过遍历后我们发现不仅有序还顺便去重了。

因为 set 就像我们上次的二叉搜索树一样,需要用key来比较大小然后插入,所以无法插入两个相同的值。 

成员函数 insert

 

 关于 set 的 insert 我们只看这么一个,因为只有这个最常用。

参数:参数就是 value_type 类型的一个参数,value_type 又是什么类型呢?

value_type 就是模板中的类型 T。

返回值 :返回值是一个 pair 其中 pair 的第一个参数是插入后的迭代器,或者是插入失败后的那个位置。

上面我们有一个 pair ,pair 是什么类型呢?我们下面,这里先不说。

	set<int> se;se.insert(10);se.insert(3);se.insert(1);se.insert(9);se.insert(6);se.insert(8);se.insert(2);for (auto e : se)cout << e << " ";cout << endl;

这个就是我们单元素的插入,而这个也是最常用的。

iterator

 

 set 的迭代器呢,是一个双向迭代器,并且还是 const value_type,所以set 的迭代器里面的值是不能修改的。

	vector<int> v{ 2,3,1,8,3,2,9,9,4,0,3,4,6,7,6,6,6,2 };set<int> se(v.begin(), v.end());for (auto& e : se)cout << ++e << " ";cout << endl;

 我们还是使用上面的一段代码,但是这里在使用范围for 的时候加了引用,我们编译一下。

 所以set 的key 其实是不可修改的。

 

find

set 也提供了 find 就是查找传入的一个值,如果查到了就返回该位置的迭代器,否则就返回 iterator::end()

那么算法里面的查找和set提供的查找有什么不同吗?

 

	set<int>::iterator it1 = find(se.begin(), se.end(), 1);if (it1 != se.end())cout << (*it1) << endl;auto it2 = se.find(1);if (it2 != se.end())cout << (*it2) << endl;

 这里我们就用到 auto 了,可以自动推导返回值类型。

那么上面的这两个有什么区别呢?

区别:

  • 算法里面的查找是一个一个查找,也就是通过迭代器一个一个遍历,时间复杂度为 O(N)
  • set提供的find,的查找是搜索树的查找,时间复杂度为O(N logN)

count

 set 除了提供了 find 还提供了 count,count也是和set一样的查找功能,但是返回值有差异,set返回查找到的迭代器,count返回查找到的个数。

那么对于 set 来说只能插入不同的值,要返回值个数有什么用呢?

其实这里的 count 是为了下面说的 multiset 设计,但是为了匹配一点,set 也设计了该函数。

所以这里也就不多介绍。

pair

pair 的模板参数

 pair 就是一个模板的类,其中有两个值,一个是 first,另一个是second。

make_pair

make_pair 是一个模板函数,其作用就是返回饭hi一个构造的pair。 

 

multiset使用

multiset 的模板参数

在模板参数这边,set 与 multiset 是一样的。

set 和 multiset 的区别就是set 只能插入不同值的元素,但是 multiset 可以插入相同值的元素。

所以下面的 multiset 我们就只看一下插入相同元素后遍历后的结果。

set 与 multiset 的区别

	vector<int> v{ 2,3,1,8,3,2,9,9,4,0,3,4,6,7,6,6,6,2 };multiset<int> muset(v.begin(), v. end());for (auto e : muset)cout << e << " ";cout << endl;


相比set来说 multiset 即使是插入多个相同元素也是没有问题的。

count 

multiset 的count 函数就是可以返回查找到元素的个数了,set 只能返回 1或者 0,但是multiset 还可以返回大于 1 的值,因为这里的 multoset 可以存入相同的值。

map使用

map 的模板参数

 map 是一个 key value 的模型,一个 key 对应一个value,所以key 也同样不可以重复。

还有一个T,T就表示的是 value 的类型。

map 同样和 set 是一样的,还是需要提供一个模板参数关于比较的。

还有一个空间配置器,这里也不多介绍。

构造函数

map 的构造函数也是可以用一段区间来初始化。

	map<char, int> first{ {'a', 1}, {'b', 2}, {'c', 3}, {'d', 4} };map<char, int> second(first.begin(), first.end());for (auto e : second)cout << e.first << " : " << e.second << endl;

 先不要管我们下面的打印,我们先看一下能否遍历。

insert

 这里 map 的插入也是返回一个 pair。

那么这里插入的 value 是什么呢?

这里的 value_type 是一个pair,所以我们插入的值也是一个pair。

这里的返回值是什么意思呢?

其中如果插入成功就返回的pair里面的 first 就是插入成功位置的迭代器,second 就是true,失败的话 first 就是一个已有的那个 key 的迭代器,second 就是false。

	map<int, int> hash;pair<int, int> pair1(1, 11);hash.insert(pair1);hash.insert(pair<int, int>(2,22));hash.insert(make_pair(3, 33));

 这个就是插入,这里主要是为了介绍几种插入方式,其中一个是构造一个 pair 对象,然后插入,还有一个是使用pair 的匿名对象,最后一个就是我们前面介绍的 make_pair 函数,该函数返回一个pair的对象。

iterator

这里的迭代器就是一个 value_type,并且也是双向迭代器。

find

 

这里的 find 返回的也是一个迭代器,而这里的迭代器又是一个 value_type类型的,所以查找到的值,里面的 first 就是key, second 就是value。

	map<char, int> hash{ {'a', 1}, {'b', 2}, {'c', 3}, {'d', 4} };auto it = hash.find('a');if (it != hash.end())cout << (*it).first << ":" << (*it).second << endl;

 

count

 

map 的 count 也是和 set 是一样的,主要也是为了 multimap 设计的。

operator[]

operato[] 可以说是map 里面很重要的一个内容了,而且operator[] 同样很好用。

这里的 [] 里面传入的值是一个 key 类型的数据。

operator[] 的作用:

如果没有该元素,就插入,有的话,就返回该 key 对应的 value。

是怎么做到的?

其中 operator[] 是使用 insert 来实现的,

V& operator[](const K& key)
{pair<iterator, bool> ret = insert(key, V());return ret.first->second;
}

 其实大概就是这样实现的。

multimap使用

multimap与map 的区别

这里的 multimap 与 map 实际上和 set 与 multiset 是差不多的,multimap 可以插入相同元素的值,而map 是不可以的。

其中 count 函数也就是为 multimap 设计的。

那么他们的区别是什么呢? 我觉得最大的几个区别就是上面的一个,还有一个就是multimap 是没有 operator[]  的。

因为 multimap 可以插入相同元素的值,那么operator[] 里面传入的是key, 返回的是 value,但是这里的key 不是唯一的,所以没有 operator[].

相关文章:

setmap使用

目录 set使用 set的模板参数 构造函数 成员函数 insert iterator ​编辑 find count pair pair 的模板参数 make_pair multiset使用 multiset 的模板参数 set 与 multiset 的区别 count map使用 map 的模板参数 构造函数 insert iterator find ​编辑 cou…...

Python3 网络爬虫开发实战

JavaScript逆向爬虫 JavaScript接口加密技术&#xff0c;JavaScript有以下两个特点&#xff1a; JS代码运行在客户端&#xff0c;所以它必须在用户浏览器加载并运行JS代码公开透明&#xff0c;所以浏览器可以直接获取到正在运行的JS源码。 所以JS代码不安全&#xff0c;任何…...

docker: CMD和ENTRYPOINT的区别

ENTRYPOINT&#xff1a; 容器的执行命令&#xff08;属于正统命令&#xff09; 可以使用--build-arg ENVIROMENTintegration参数覆盖 ocker build --build-arg ENVIROMENTintegration 两者同时存在时 CMD作为ENTRYPOINT的默认参数使用外部提供参数会覆盖CMD提供的参数。 CMD单…...

DC电源模块对于定制的要求主要有这几点

BOSHIDA DC电源模块对于定制的要求主要有这几点 DC电源模块是一种将交流电转换成为稳定的直流电的装置。在现代工业生产中&#xff0c;DC电源模块被广泛应用于各种电子设备中&#xff0c;例如计算机、手机、电视等。为了满足不同用户需求&#xff0c;DC电源模块的定制需求也是…...

Kubernetes高可用集群二进制部署(六)Kubernetes集群节点添加

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…...

网关 GateWay 的使用详解、路由、过滤器、跨域配置

一、网关的基本概念 SpringCloudGateway网关是所有微服务的统一入口。 1.1 它的主要作用是&#xff1a; 反向代理&#xff08;请求的转发&#xff09; 路由和负载均衡 身份认证和权限控制 对请求限流 1.2 相比于Zuul的优势&#xff1a; SpringCloudGateway基于Spring5中…...

vsocde里面远程连接服务器报could not esatablish connection xxxx

我在vscode里面远程连接服务器编辑代码时&#xff0c;正常我按F1选择了服务器IP地址&#xff0c;然后让我选在Linux&#xff0c;然后我再输入服务器密码&#xff0c;但是当我选择Linux系统之后直接没出让我输入服务器密码的输入框&#xff0c;而是直接报错 could not esatablis…...

Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改

目录 Hi3798MV200 恩兔N2 NS-1 (一): 设备介绍和刷机说明Hi3798MV200 恩兔N2 NS-1 (二): HiNAS海纳思使用和修改Hi3798MV200 恩兔N2 NS-1 (三): 制作 Ubuntu rootfsHi3798MV200 恩兔N2 NS-1 (四): 制作 Debian rootfs 关于 海纳思全称是海思机顶盒NAS系统, 网站 https://www…...

无涯教程-Perl - foreach 语句函数

foreach 循环遍历列表值&#xff0c;并将控制变量(var)依次设置为列表的每个元素- foreach - 语法 Perl编程语言中的 foreach 循环的语法是- foreach var (list) { ... } foreach - 流程图 foreach - 示例 #!/usr/local/bin/perllist(2, 20, 30, 40, 50);# foreach loop ex…...

easyWechat 5.x 复写代码 获取企业微信授权用户敏感信息

复写 (new SocialiteManager($config))->extend(wework, function ($config) {return new \App\Extend\EasyWechat\Work\WeWork($config);});创建的 \App\Extend\EasyWechat\Work\WeWork是我们需要复写的类 <?phpnamespace App\Extend\EasyWechat\Work;use Overtrue\So…...

医疗器械研发中的可用性工程实践(一)

致读者&#xff1a;以前看《楚门的世界》&#xff0c;《蝴蝶效应》&#xff0c;《肖申克的救赎》&#xff0c;《教父》&#xff0c;《横道世之介》&#xff0c;《老友记》&#xff0c;一个人的一生匆匆。作为平凡人就是历史大河中的浪花&#xff0c;顺势而为&#xff0c;起起伏…...

LNMP搭建

LNMP&#xff1a;目前成熟的企业网站的应用模式之一&#xff0c;指的是一套协同工作的系统和相关软件 能够提供静态页面服务&#xff0c;也可以提供动态web服务。 这是一个缩写 L linux系统&#xff0c;操作系统。 N nginx网站服务&#xff0c;也可也理解为前端&#xff0c…...

软件测试分类总结

目录 1.根据源代码可见度划分 1.1黑盒测试 1.2白盒测试 1.3灰盒测试 2.根据开发阶段划分 2.1单元测试 2.2集成测试 2.3系统测试 2.4验收测试 3.按照实施组织划分 3.1α测试 3.2β测试 3.3第三方测试 4.按照是否运行程序划分 4.1静态测试 4.2动态测试 5.根据软件测试工作的…...

模糊PID(三角隶属度函数模糊化CODESYS ST代码)

三角隶属度函数的详细算法介绍,之前的专栏有详细介绍,这里不再展开讨论。相关文章链接如下: 博途三角隶属度函数FC 博途PLC模糊PID三角隶属度函数指令(含Matlab仿真)_博图模糊pid控制_RXXW_Dor的博客-CSDN博客三角隶属度函数FC,我们采用兼容C99标准的函数返回值写法,在…...

探索人工智能 | 计算机视觉 让计算机打开新灵之窗

前言 计算机视觉是一门研究如何使机器“看”的科学&#xff0c;更进一步的说&#xff0c;就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉&#xff0c;并进一步做图形处理&#xff0c;使电脑处理成为更适合人眼观察或传送给仪器检测的图像。 文章目录 前言…...

7.物联网操作系统互斥信号量

1.使用互斥信号量解决信号量导致的优先级反转&#xff0c; 2.使用递归互斥信号量解决互斥信号量导致的死锁。 3.高优先级主函数中多次使用同一信号量的使用&#xff0c;使用递归互斥信号量&#xff0c;但要注意每个信号量的使用要对应一个释放 优先级翻转问题 优先级翻转功能需…...

Vue - Element el-form 表单对象多层嵌套校验

针对el-form的数据源是对象嵌套对象&#xff0c;在进行数据绑定和校验时和单层的对象有一点区别&#xff0c; 具体是下面两部分&#xff1a; 数据源&#xff1a; fromData: {name: ,health: {height: } }1、 给 el-form-item 的 prop设为&#xff1a;prop"health.height&…...

elementUI全屏loading的使用(白屏的解决方案)

官网中有使用方法&#xff0c;但是我实际上手之后会出现白屏&#xff0c;解决办法如下&#xff1a; <el-button type"text" size"small" click"delRow(scope)"> 删除</el-button>loading: false, // loading 动画loadingInstance…...

flutter开发实战-flutter_spinkit实现多种风格进度指示器

flutter开发实战-flutter_spinkit实现多种风格进度指示器 最近开发过程中flutter_spinkit&#xff0c;这个拥有多种种风格加载指示器 一、flutter_spinkit 引入flutter_spinkit # 多种风格的模糊进度指示器flutter_spinkit: ^5.1.0效果示例 const spinkit SpinKitRotatingC…...

检测文本是否由AI生成,GPT、文心一言等均能被检测

背景 目前很多机构推出了ChatGPT等AI文本检测工具&#xff0c;但是准确率主打一个模棱两可&#xff0c;基本和抛硬币没啥区别。 先说结论&#xff0c;我们对比了常见的几款AI检测工具&#xff0c;copyleaks检测相比较而言最准确。 检测文本 AI文本片段1 来源&#xff1a;G…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代&#xff0c;情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现&#xff0c;消费者对内容的“有感”程度&#xff0c;正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...