STL常见容器之set/multiset、map/multimap
set/multiset—集合容器
- 特点
- 所有元素都会在插入时自动被排序
- 本质
- set/multiset属于关联式容器,底层结构是二叉树实现
- set和multiset区别
- set不可以插入重复数据,而multiset可以
- set插入数据的同时会返回插入结果,表示插入是否成功
- multiset不会检测数据,因此可以插入重复数据
- set不允许容器中有复杂的元素
- multiset允许容器中有复杂的元素
- 构造和赋值
- 构造
- set < T >st
- set(const set &st)
- 赋值
- set& operator=(const set &st)
- 构造
- 大小和交换
- size()
- empty()
- swap(st)
- 插入和删除
- 原型
- insert(elem)
- clear()
- erase(pos)
- erase(beg, end)
- erase(elem)—删除容器中值为elem的元素
- 原型
- 查找和统计
- 对set容器中进行查找数据及统计数据
- 原型
- find(key)—查找key是否存在,返回该键的元素的迭代器,若不存在则返回set.end()
- count(key)—统计key的元素个数—只有0/1两种选择
- pair对组创建
- 功能
- 成对出现的数据,利用对组可以返回两个数据
- 创建方式
- pair<type, type> p (value1, value2)
- pair<type, type> p = make_pair(value1, value2)
#include<iostream>#include<string>using namespace std;void test(void){// 第一种pair<string, int> Person1("zhangsan", 18);cout << " name " << Person1.first << " age " << Person1.second << endl;// 第二种pair<string, int> Person2 = make_pair("lisi", 28);cout << " name " << Person2.first << " age " << Person2.second << endl;}int main(){test();return 0;} - 功能
- set容器排序
- set容器默认排序规则为从小到大,如何改变规则
- 利用仿函数
- set容器存放内置数据类型如何改变规则
#include<iostream>#include<string>#include<set>using namespace std;// 仿函数class myCompare{public:bool operator()(int i1, int i2){return i1 > i2;}};void myPrint(const set<int>& st){for (set<int>::iterator it = st.begin(); it != st.end(); it++){cout << *it << endl;}}void test(void){set<int> st;st.insert(10);st.insert(30);st.insert(90);st.insert(40);myPrint(st);cout << "=================================" << endl;set<int, myCompare> sts ;sts.insert(10);sts.insert(30);sts.insert(90);sts.insert(40); for (set<int, myCompare>::iterator it = sts.begin(); it != sts.end(); it++){cout << *it << endl;}}int main(){test();return 0;} - set容器存放自定义数据类型如何改变规则—必须要自定义排序规则
#include<iostream>#include<string>#include<set>using namespace std;class Person{public:string m_name;int m_age;Person(string name, int age){this->m_name = name;this->m_age = age;}};// 仿函数class myCompare{public:bool operator()(const Person& i1, const Person& i2){return i1.m_age > i2.m_age;}};void test(void){set<Person, myCompare> Infor;Person p1("zhangsan", 18);Person p2("lisi", 28);Person p3("wangwu", 20);Infor.insert(p1);Infor.insert(p2);Infor.insert(p3);for(set<Person, myCompare>::iterator it = Infor.begin(); it != Infor.end(); it++){cout << "name " << it->m_name << " age " << it->m_age << endl;}}int main(){test();return 0;}
map/multimap容器
- 基本概念
- map中每个元素都是pair
- pair中第一个元素为key,起到索引作用,第二个元素为value
- 所有元素都会根据元素的键值自动排序
- 本质
- map/multimap属于关联式容器,底层结构是二叉树
- 优点
- 可以根据key快速找到value
- map和multimap区别
- map不允许容器中有重复key值元素
- multimap允许容器中有重复key值元素
- 构造和赋值
- 原型
- map< T1, T2 > mp
- map(const map &mp)
- 赋值
- map& operator=(const map &mp)
#include<iostream>#include<map>using namespace std;void test(void){map<int, int> m;m.insert(pair<int, int>(1, 10));m.insert(pair<int, int>(2, 20));m.insert(pair<int, int>(3, 30));for(map<int, int>::iterator it = m.begin(); it != m.end(); it++){cout << "first " << it->first << " second "<< it->second << endl;}}int main(){test();return 0;} - 原型
- 大小和交换
- size()
- empty()
- swap(st)
- 插入和删除
- insert(elem)
// 第一种m.insert(pair<int, int>(1, 10));// 第二种---推荐m.insert(make_pair(2, 20));// 第三种m.insert(map<int, int>::value_type(3, 30));// 第四种m[4] = 40; - clear()
- erase(pos)
- erase(beg, end)
- erase(key)—删除容器中值为key的元素
- insert(elem)
- 查找和统计
- find(key)—找到返回迭代器,.first是key,.second是value,没找到返回m.end()
- count(key)—返回整型有几个,只有0/1
- map容器排序
- map容器默认排序规则为按照key值进行从小到大排序,依然是利用仿函数可以改变排序规则
- map< int, int, myCompare >
相关文章:
STL常见容器之set/multiset、map/multimap
set/multiset—集合容器 特点 所有元素都会在插入时自动被排序 本质 set/multiset属于关联式容器,底层结构是二叉树实现 set和multiset区别 set不可以插入重复数据,而multiset可以set插入数据的同时会返回插入结果,表示插入是否成功multiset…...
ThreadLocal 实现原理
每个 Thread 中都存储着一个成员变量:ThreadLocalMap /** InheritableThreadLocal values pertaining to this thread. This map is* maintained by the InheritableThreadLocal class.*/ThreadLocal.ThreadLocalMap inheritableThreadLocals null; ThreadLocal 本…...
BUUCTF [羊城杯 2020]easyre 题解
一.查壳 64位无壳 二.主函数逻辑 可以得知flag长度为38,然后进行三次加密 第一次加密是base64加密,得到code1 第二次加密是将code1拆成四段赋给code2 第三次加密是将code2内的数字和字母移3位,其他字符不变 str2保存的是最终的加密字符 三.encode_one_base64 看到主函数…...
网络协议(十二):HTTPS(SSL/TLS、TLS1.2的连接)
网络协议系列文章 网络协议(一):基本概念、计算机之间的连接方式 网络协议(二):MAC地址、IP地址、子网掩码、子网和超网 网络协议(三):路由器原理及数据包传输过程 网络协议(四):网络分类、ISP、上网方式、公网私网、NAT 网络…...
九九乘法表--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
实例9:九九乘法表 乘法口诀是中国古代筹算中进行乘法、除法、开方等运算的基本计算规则,沿用至今已有两千多年。古代的乘法口诀与现在使用的乘法口诀顺序相反,自上而下从“九九八十一”开始到“一一如一”为止,因此,古…...
在超算上安装文件树命令tree
超算平台使用的centos系统没有内置tree命令,需要通过源码安装。记录安装流程如下。 1. 下载源码包 下载链接如下: http://mama.indstate.edu/users/ice/tree/ 选择“Download the latest version” 如本文下载了源码包“tree-2.1.0.tgz”. 2. 源码包…...
论文投稿指南——中文核心期刊推荐(经济管理)
【前言】 🚀 想发论文怎么办?手把手教你论文如何投稿!那么,首先要搞懂投稿目标——论文期刊 🎄 在期刊论文的分布中,存在一种普遍现象:即对于某一特定的学科或专业来说,少数期刊所含…...
在vue中如果computed属性是一个异步操作怎么办?
在计算属性中使用异步方法时,可以使用async/await来处理异步操作。由于计算属性是基于它们的依赖缓存的,所以我们需要使用一个返回Promise的异步方法来确保计算属性能够正常运行。 下面是一个简单的示例,演示如何在计算属性中使用异步方法&am…...
SRP合批问题
1)SRP合批问题 2)多个Base相机渲染到同一个渲染目标,移动平台花屏的问题 3)粒子系统对GPU Instancing的支持 4)如何修改URP下场景和UI分辨率分离(不需要改颜色空间) 这是第327篇UWA技术知识分…...
蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621
HS6621CxC是一个优化功耗真正芯片系统(SOC)解决方案,适用于蓝牙低功耗和私有的2.4GHz应用场景。它集成了一个高性能、小功率的射频收发器,具有蓝牙基带和丰富的外围IO扩展。还集成了电源管理,以提供高效的电源管理。 …...
数据库连接池
数据库连接---执行完毕---释放 连接--释放 十分浪费系统资源 池化技术:准备一些预先的资源,过来就连接预先准备好的 最小连接数: 10 最大连接数:15 业务最高承载上限 排队等待, 等待超时:100…...
Arrays-sort-的用法
1.集合交换元素 Collections.swap(List<?> list, int i, int j); 源码: /*** Swaps the elements at the specified positions in the specified list.* (If the specified positions are equal, invoking this method …...
华为OD机试真题Java实现【寻找相同子串】真题+解题思路+代码(20222023)
寻找相同子串 题目 给你两个字符串 t 和 p ,要求从 t 中找到一个和 p 相同的连续子串,并输出该字串第一个字符的下标。 🔥🔥🔥🔥🔥👉👉👉👉👉👉 华为OD机试(Java)真题目录汇总 输入描述: 输入文件包括两行,分别表示字符串 t 和 p ,保证 t 的长度…...
性能指标 确定性能目标 性能场景设计
性能测试指标 性能测试指标分为业务技术指标和系统资源指标,在服务端性能业务技术指标中分为三个指标,系统吞吐量,响应时间和并发用户数。响应时间分为前端展现时间和系统响应时间两部分,系统吞吐量体现软件系统负载承受能力的指…...
ENVI_Classic:快速入门_菜单栏常见功能的基本介绍
说明:由于实验要求,所以并没有对各个功能进行详尽的解释,大多点到为止,少部分实验内容是实验要求所以步骤详尽。当然由于经验不足,有一些可能存在错误恳请指正.1. 实验目的通过ENVI Classic对自行下载的遥感图像进行一…...
【深度探讨】公共部门在选择区块链平台时要考虑的6个方面
发表时间:2022年8月17日 信息来源:bsvblockchain.org 与私营企业相比,全球的公共部门组织在考虑升级软件解决方案时面临着一系列的全新挑战。公共部门的决策流程冗长而复杂,他们要不惜一切代价避免对现有业务造成干扰,…...
基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像
一、项目功能介绍 当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服…...
42-Golang中的单元测试
Golang中的单元测试需求传统方法基本介绍单元测试快速入门总结综合案例需求 在工作中,我们会遇到这样的情况,就是去确认一个函数,或者一个模块的结果是否正确 传统方法 在main函数中,调用addUpper函数,看看实际输出…...
python实现k_means聚类
K-Means算法是将一组N个样本的特征矩阵X划分为K个无交集的簇,直观上来看是簇是一组一组聚集在一起的数据,在一个簇中的数据就认为是同一类。簇就是聚类的结果表现。簇中所有数据的均值通常被称为这个簇的“质心”(Centroids)。在一个二维平面中ÿ…...
【批处理脚本】-3.3-exit命令详解
"><--点击返回「批处理BAT从入门到精通」总目录--> 共3页精讲(列举了所有exit的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...
从‘Hello World’到打开PRT文件:一个完整的NX C++外部exe开发入门实战(VS2015 + NX12)
从‘Hello World’到打开PRT文件:一个完整的NX C外部exe开发入门实战(VS2015 NX12) 在工业设计领域,NX(原Unigraphics)作为一款功能强大的CAD/CAM/CAE软件,其二次开发能力为工程师提供了极大的…...
脉冲神经网络SAST训练方法:解决代理-硬件转换差距
1. 脉冲神经网络与传感器计算的挑战脉冲神经网络(SNNs)作为第三代神经网络模型,其核心特征是采用离散的脉冲信号进行信息传递和处理。这种事件驱动的计算方式与传统的连续激活神经网络(ANNs)有着本质区别。在传感器端计…...
被AI欺骗啦:一个有趣的三极直接耦合放大电路的调整
简 介: 本文探讨了一个三极直接耦合放大电路的设计问题。初始使用AI工具设计的电路参数看似可行,但仿真显示Q1晶体管处于异常工作状态(BC结正向偏置)。通过重新调整电阻参数,特别是将反馈电阻R8设为10MΩ后,…...
41《CAN总线报文周期、抖动与实时性分析》
CAN总线基础:从物理层到数据链路层的核心概念 一、一个让我熬夜的CAN问题 去年调试某款车载ECU时遇到个诡异现象:同一批次的控制器,有的在-20℃低温下CAN通信完全正常,有的却频繁丢帧。示波器挂上去一看,显性电平的下降沿斜率明显变缓,从正常的15ns拖到了40ns。查了三天…...
告别PPO采样地狱!用SAC算法在连续控制任务中实现高效训练(附PyTorch代码)
SAC算法实战:突破PPO采样瓶颈的连续控制解决方案 在机器人控制、自动驾驶和游戏AI开发中,强化学习工程师们经常面临一个共同困境:算法需要与环境进行海量交互才能学到有效策略。以Ant机器人行走任务为例,传统PPO算法可能需要500万…...
AVL许可排队严重?不想买新许可,回收闲置即刻算例
AVL许可排队严重?不买新许可,回收闲置许可就能解决,我就踩过这个坑关键词分析:AVL里藏着的宝藏AVL许可排队严重?别急着买新许可!我们先来看看这个问题到底藏哪儿。2026年我帮某制造业客户做系统优化时&…...
研发交付管理:资源化与项目制的实践思考
说明(阅读前):本文系 方法论层面的归纳,依据常见软件研发组织实践整理,不涉及任何特定企业的内部制度、人数或薪酬细节;文中角色名称(如研发经理、项目发起人)为 通用称谓࿰…...
LIO-SAM源码逐行解析:从因子图构建到多传感器融合实战
1. LIO-SAM技术架构解析 LIO-SAM(Lidar Inertial Odometry via Smoothing and Mapping)是Tixiao Shan博士在LeGO-LOAM基础上开发的激光-惯性紧耦合SLAM系统。它的核心创新点在于采用因子图优化框架,将IMU预积分、激光里程计、GPS和闭环检测四…...
科研人狂喜!AI生成的位图可以转矢量图了
今天给大家分享我最近挖到的宝藏科研工具:MedPeer「图片创作」——国内领先的垂直领域AI科研绘图工具,刚好解决我们科研人最头疼的几个痛点。尤其是它的人工绘图转换服务,简直是帮我解决了大麻烦,必须给大家捋捋明白。我们科研人绘…...
如何快速掌握MRIcroGL:医学影像三维可视化的完整指南
如何快速掌握MRIcroGL:医学影像三维可视化的完整指南 【免费下载链接】MRIcroGL v1.2 GLSL volume rendering. Able to view NIfTI, DICOM, MGH, MHD, NRRD, AFNI format images. 项目地址: https://gitcode.com/gh_mirrors/mr/MRIcroGL MRIcroGL是一款功能强…...
