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

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的元素
  • 查找和统计
    • 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属于关联式容器&#xff0c;底层结构是二叉树实现 set和multiset区别 set不可以插入重复数据&#xff0c;而multiset可以set插入数据的同时会返回插入结果&#xff0c;表示插入是否成功multiset…...

ThreadLocal 实现原理

每个 Thread 中都存储着一个成员变量&#xff1a;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的连接)

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…...

九九乘法表--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)

实例9&#xff1a;九九乘法表 乘法口诀是中国古代筹算中进行乘法、除法、开方等运算的基本计算规则&#xff0c;沿用至今已有两千多年。古代的乘法口诀与现在使用的乘法口诀顺序相反&#xff0c;自上而下从“九九八十一”开始到“一一如一”为止&#xff0c;因此&#xff0c;古…...

在超算上安装文件树命令tree

超算平台使用的centos系统没有内置tree命令&#xff0c;需要通过源码安装。记录安装流程如下。 1. 下载源码包 下载链接如下&#xff1a; http://mama.indstate.edu/users/ice/tree/ 选择“Download the latest version” 如本文下载了源码包“tree-2.1.0.tgz”. 2. 源码包…...

论文投稿指南——中文核心期刊推荐(经济管理)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…...

在vue中如果computed属性是一个异步操作怎么办?

在计算属性中使用异步方法时&#xff0c;可以使用async/await来处理异步操作。由于计算属性是基于它们的依赖缓存的&#xff0c;所以我们需要使用一个返回Promise的异步方法来确保计算属性能够正常运行。 下面是一个简单的示例&#xff0c;演示如何在计算属性中使用异步方法&am…...

SRP合批问题

1&#xff09;SRP合批问题 ​2&#xff09;多个Base相机渲染到同一个渲染目标&#xff0c;移动平台花屏的问题 3&#xff09;粒子系统对GPU Instancing的支持 4&#xff09;如何修改URP下场景和UI分辨率分离&#xff08;不需要改颜色空间&#xff09; 这是第327篇UWA技术知识分…...

蓝牙5.1低功耗SOC 私有协议2.4GHz芯片HS6621

HS6621CxC是一个优化功耗真正芯片系统&#xff08;SOC&#xff09;解决方案&#xff0c;适用于蓝牙低功耗和私有的2.4GHz应用场景。它集成了一个高性能、小功率的射频收发器&#xff0c;具有蓝牙基带和丰富的外围IO扩展。还集成了电源管理&#xff0c;以提供高效的电源管理。 …...

数据库连接池

数据库连接---执行完毕---释放 连接--释放 十分浪费系统资源 池化技术&#xff1a;准备一些预先的资源&#xff0c;过来就连接预先准备好的 最小连接数&#xff1a; 10 最大连接数&#xff1a;15 业务最高承载上限 排队等待&#xff0c; 等待超时&#xff1a;100…...

Arrays-sort-的用法

1.集合交换元素 Collections.swap&#xff08;List<?> list, int i, int j&#xff09;&#xff1b; 源码&#xff1a; /*** 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 的长度…...

性能指标 确定性能目标 性能场景设计

性能测试指标 性能测试指标分为业务技术指标和系统资源指标&#xff0c;在服务端性能业务技术指标中分为三个指标&#xff0c;系统吞吐量&#xff0c;响应时间和并发用户数。响应时间分为前端展现时间和系统响应时间两部分&#xff0c;系统吞吐量体现软件系统负载承受能力的指…...

ENVI_Classic:快速入门_菜单栏常见功能的基本介绍

说明&#xff1a;由于实验要求&#xff0c;所以并没有对各个功能进行详尽的解释&#xff0c;大多点到为止&#xff0c;少部分实验内容是实验要求所以步骤详尽。当然由于经验不足&#xff0c;有一些可能存在错误恳请指正.1. 实验目的通过ENVI Classic对自行下载的遥感图像进行一…...

【深度探讨】公共部门在选择区块链平台时要考虑的6个方面

发表时间&#xff1a;2022年8月17日 信息来源&#xff1a;bsvblockchain.org 与私营企业相比&#xff0c;全球的公共部门组织在考虑升级软件解决方案时面临着一系列的全新挑战。公共部门的决策流程冗长而复杂&#xff0c;他们要不惜一切代价避免对现有业务造成干扰&#xff0c;…...

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

一、项目功能介绍 当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服…...

42-Golang中的单元测试

Golang中的单元测试需求传统方法基本介绍单元测试快速入门总结综合案例需求 在工作中&#xff0c;我们会遇到这样的情况&#xff0c;就是去确认一个函数&#xff0c;或者一个模块的结果是否正确 传统方法 在main函数中&#xff0c;调用addUpper函数&#xff0c;看看实际输出…...

python实现k_means聚类

K-Means算法是将一组N个样本的特征矩阵X划分为K个无交集的簇&#xff0c;直观上来看是簇是一组一组聚集在一起的数据&#xff0c;在一个簇中的数据就认为是同一类。簇就是聚类的结果表现。簇中所有数据的均值通常被称为这个簇的“质心”(Centroids)。在一个二维平面中&#xff…...

【批处理脚本】-3.3-exit命令详解

"><--点击返回「批处理BAT从入门到精通」总目录--> 共3页精讲(列举了所有exit的用法,图文并茂,通俗易懂) 在从事“嵌入式软件开发”和“Autosar工具开发软件”过程中,经常会在其集成开发环境IDE(CodeWarrior,S32K DS,Davinci,EB Tresos,ETAS…)中,…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中&#xff0c;crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用&#xff0c;用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益&#xff0c;允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...