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

C++从零开始的打怪升级之路(day47)

这是关于一个普通双非本科大一学生的C++的学习记录贴

在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料

那么开启正题

今天分享的是关于set和map的知识点

1.关联式容器

在前面,我们已经学习了STL的部分容器,如vector,list,deque,这些容器被称为序列式容器,因为底层是线性序列的数据结构,里面存储的是元素本身,那么什么是关联式容器呢?

关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是<key, value>结构的键值对在数据检索时比序列式容器效率更高

2.键值对

键值对是用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和valuekey代表键值,value表示与key对应的信息

如:假设我们现在要建立一个英汉互译的字典,那么该字典中必然有英文单词与其对应的信息,而且它们是一一对应的关系,即通过单词可以找到其对应的中文

template<class T1, class T2>
struct paic
{typedef T1 first_type;typedef T2 second_tyde;T1 first;T2 second;paic():first(T1()),second(T2()){}paic(const T1& a, const T2& b):first(a),frist(b){}
};

3.树形结构的关联式容器

根据应用场景不同,STL实现了两种不同结构的管理式容器,树型结构与哈希结构,树形结构的关联式容器主要有四种:map,set,multimap,multiset,这四种容器的公共特点是:使用平衡搜索树(即红黑树)作为其底层的结果,容器中的元素是一个有序的序列

4.set

4.1关于set

1.与map/multimpa中存储真正的键值对<key,value>不同,set中只放value,但在底层实际存放的是<value,value>构成的键值对

2.set中插入元素时,直接插入value即可,不需要构造键值对

3.set中的元素不可以重复(multi_set不同),因此可以利用set进行去重

4.使用set的迭代器遍历set的元素,可以得到有序序列

5.set中查找元素的时间复杂度为:O(logN)

6.set在底层是用二叉搜索树(红黑树)实现的

4.2set的使用

4.2.1set的构造

set (const Compare& comp = Compare(), const Allocator& 
= Allocator() ); 
//构造空的set
set ( const set<Key,Compare,Allocator>& x);
//set的拷贝构造

4.2.2set的修改操作

pair<iterator,bool> insert ( 
const value_type& x )
//在set中插入元素x,实际插入的是<x, x>构成的
键值对,如果插入成功,返回<该元素在set中的
位置,true>,如果插入失败,说明x在set中已经
存在,返回<x在set中的位置,false>void erase ( iterator position )
//删除set中position位置上的元素void swap ( 
set<Key,Compare,Allocator>& 
st );
//交换set中的元素void clear ( )
//将set中的元素清空iterator find ( const 
key_type& x ) const
//返回set中值为x的元素的位置

4.2.3set的迭代器

set迭代器用法很简单,这里不在给出,后面模拟实现再详细理解底层是如何实现的

4.2.4举例代码

void Print(set<int>& s)
{set<int>::iterator it = s.begin();while (it != s.end()){cout << *it << " ";++it;}cout << endl;
}void Test_set1()
{set<int> s;s.insert(1);s.insert(9);s.insert(3);s.insert(1);s.insert(1);Print(s);s.erase(1);Print(s);set<int>::iterator pos = s.find(5);s.erase(5);pos = find(s.begin(), s.end(), 5);if (pos != s.end()){s.erase(pos);}
}

5.map

5.1关于map

1.在map中,键值key通常用于排序和惟一地标识元素,而值value中存储与此键值key关联的 内容。键值key和值value的类型可能不同,并且在map的内部,key与value通过成员类型 value_type绑定在一起,为其取别名称为pair

2.在内部,map中的元素总是按照键值key进行比较排序的

3.map支持下标访问符,即在[]中放入key,就可以找到与key对应的value

4.map通常被实现为二叉搜索树(红黑树)

5.2的使用

5.2.1map的构造

map()       //构造一个空的map

5.2.2map的容量与元素访问

bool empty ( ) const
//检测map中的元素是否为空,是返回
//true,否则返回falsesize_type size() const
//返回map中有效元素的个数mapped_type& operator[] (const 
key_type& k)
//返回去key对应的value

5.2.3map的修改操作

pair<iterator,bool> insert ( 
const value_type& x )
//在map中插入键值对x,注意x是一个键值
对,返回值也是键值对:iterator代表新插入
元素的位置,bool代表释放插入成功void erase ( iterator position )
//删除position位置上的元素size_type erase ( const 
key_type& x )
//删除键值为x的元素void erase ( iterator first, 
iterator last )
//删除[first, last)区间中的元素void swap ( 
map<Key,T,Compare,Allocator>& 
mp )
//交换两个map中的元素void clear ( )
//将map中的元素清空iterator find ( const key_type& x 
)
//在map中插入key为x的元素,找到返回该元
素的位置的迭代器,否则返回end

5.2.4map的迭代器

map迭代器用法很简单,这里不在给出,后面模拟实现再详细理解底层是如何实现的

5.2.5举例代码

void Test_map1()
{map<string, int> m;m.insert(make_pair("苹果", 1));m.insert(make_pair("香蕉", 3));m.insert(make_pair("桃子", 5));m.insert(make_pair("樱桃", 4));map<string, int>::iterator it = m.begin();while (it != m.end()){cout << it->first << ":" << it->second << endl;++it;}cout << endl;
}

新手写博客,有不对的位置希望大佬们能够指出,也谢谢大家能看到这里,让我们一起学习进步吧!

相关文章:

C++从零开始的打怪升级之路(day47)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于set和map的知识点 1.关联式容器 在前面&#…...

香橙派AIpro开发板开箱测评

2023年12月&#xff0c;香橙派联合华为发布了基于昇腾的Orange Pi AIpro开发板&#xff0c;提供8/20TOPS澎湃算力&#xff0c;能覆盖生态开发板者的主流应用场景&#xff0c;让用户实践各种创新场景&#xff0c;并为其提供配套的软硬件。香橙派AIpro开发板一经发布便吸引了众多…...

ISP基础概述

原文来自ISP 和摄像头基本知识 本文主要介绍ISP&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f380;CSDN主页 发狂的小花 &#x1f3…...

C++第一弹---C++入门(上)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 【C详解】 C入门 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间使用 3、C输入&输出 4、缺省参数 4.1、缺省参数概念 4.2、缺省参…...

VScode格式化快捷键

vscode格式化代码快捷键 如何使用快捷键格式化代码。使用Java的格式去设置&#xff0c;发现不起作用。 在这里记录一下&#xff1a; 在Windows中&#xff0c;vscode格式化代码快捷键是“ShiftAltF”&#xff1b; 在Mac中&#xff0c;vscode格式化代码快捷键是“ShiftOption…...

HCIP---IS-IS协议

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.IS-IS协议概述 IS-IS是一种基于链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;它使用最短路径优先算法&#xff08;SPF或Dijkstra&#xff09;进行路由计算。这种协议在自治…...

突破编程_C++_设计模式(组合模式)

1 组合模式的基本概念 C中的组合模式是一种对象结构型模式&#xff0c;它将多个对象组合成树形结构&#xff0c;以表示具有整体-部分关系的层次结构。在这个模式中&#xff0c;对单个对象&#xff08;叶子对象&#xff09;与组合对象&#xff08;容器对象&#xff09;的使用具…...

010Editor汉化版+下载+注册码+模板bug

项目场景&#xff1a; 这天我想使用我的不知名的一个破解版本的010Edit来查看一个EXE程序&#xff0c;并想使用模板功能&#xff0c;但是发现没有该模板还无法下载最新模板 问题描述 010Edit联网后需要注册码&#xff1a; 010 Editor 激活码生成器 使用方法 参照教程使用0…...

js【详解】BOM

浏览器对象模型 &#xff08;Browser obiect Mode 简称 BOM&#xff09; 浏览器对象即 window&#xff0c;调用window对象的属性和方法时&#xff0c;可以省略window window 常用的属性 Navigator 常用于获取浏览器的信息 navigator.userAgent;火狐浏览器范例&#xff1a; “…...

Leetcode 3077. Maximum Strength of K Disjoint Subarrays

Leetcode 3077. Maximum Strength of K Disjoint Subarrays 1. 解题思路 1. 朴素思路2. 算法优化 2. 代码实现 题目链接&#xff1a;3077. Maximum Strength of K Disjoint Subarrays 1. 解题思路 这道题很惭愧没有搞定&#xff0c;思路上出现了差错&#xff0c;导致一直没能…...

【JetsonNano】onnxruntime-gpu 环境编译和安装,支持 Python 和 C++ 开发

1. 设备 2. 环境 sudo apt-get install protobuf-compiler libprotoc-devexport PATH/usr/local/cuda/bin:${PATH} export CUDA_PATH/usr/local/cuda export cuDNN_PATH/usr/lib/aarch64-linux-gnu export CMAKE_ARGS"-DONNX_CUSTOM_PROTOC_EXECUTABLE/usr/bin/protoc&qu…...

知名比特币质押协议项目Babylon确认参加Hack.Summit()2024区块链开发者大会

Babylon项目已确认将派遣其项目代表出席2024年在香港数码港举办的Hack.Summit()2024区块链开发者大会。作为比特币生态的领军项目&#xff0c;Babylon积极参与全球区块链领域的交流与合作&#xff0c;此次出席大会将为其提供一个展示项目进展、交流技术与创新思路的重要平台。B…...

如何学习、上手点云算法(三):用VsCode、Visual Studio来debug基于PCL、Open3D的代码

写在前面 本文内容 以PCL 1.14.0&#xff0c;Open3D0.14.1为例&#xff0c;对基于PCL、Open3D开发的代码进行源码debug&#xff1b; 如何学习、上手点云算法系列&#xff1a; 如何学习、上手点云算法(一)&#xff1a;点云基础 如何学习、上手点云算法(二)&#xff1a;点云处理相…...

【干货】alzet渗透泵操作说明

alzet渗透泵是一款小型、可植入式的胶囊渗透泵产品&#xff0c;此产品由于其独特的渗透原理&#xff0c;深受广大科研人员的喜爱。该泵可适用于小鼠、大鼠及其他实验动物的研究&#xff0c;并且alzet渗透泵可减轻科研人员夜间及周末给药的困扰。alzet渗透泵无需外部连接或频繁处…...

CVPR 2022 Oral | Bailando: 基于编舞记忆和Actor-Critic GPT的3D舞蹈生成

目录 测试结果&#xff1a; 02 提出的方法 测试结果&#xff1a; 预测有3个步骤&#xff0c;速度比较慢 02 提出的方法 1. 针对舞蹈序列的VQ-VAE和编舞记忆 与之前的方法不同&#xff0c;我们不学习从音频特征到 3D 关键点序列的连续域的直接映射。相反&#xff0c;我们先让…...

解读电影级视频生成模型 MovieFactory

Diffusion Models视频生成-博客汇总 前言:MovieFactory是第一个全自动电影生成模型,可以根据用户输入的文本信息自动扩写剧本,并生成电影级视频。其中针对预训练的图像生成模型与视频模型之间的gap提出了微调方法非常值得借鉴。这篇博客详细解读一下这篇论文《MovieFactory:…...

【Python从入门到进阶】50、当当网Scrapy项目实战(三)

接上篇《49、当当网Scrapy项目实战&#xff08;二&#xff09;》 上一篇我们讲解了的Spider与item之间的关系&#xff0c;以及如何使用item&#xff0c;以及使用pipelines管道进行数据下载的操作&#xff0c;本篇我们来讲解Scrapy的多页面下载如何实现。 一、多页面下载原理分…...

【调试记录】vscode远程连接问题汇总

1. kex_exchange_identification kex_exchange_identification: read: Connection reset by xxx.xx.xx.x 一直连不上实验室的服务器&#xff0c;用PUTTY和Mobaxterm也不行&#xff08;报错&#xff1a;Remote side unexpectedly closed network connection&#xff09;。已知…...

基于springboot的疾病防控综合系统

采用技术 基于springboot的疾病防控综合系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBootMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统效果展示 用户功能效果 打卡管理 接种记录查看 公告信息查看 社区…...

js实现文本内容过长中间显示...两端正常展示

实现效果 实现思路 获取标题盒子的真实宽度, 我这里用的是clientWidth&#xff1b;获取文本内容所占的实际宽度&#xff1b;根据文字的大小计算出每个文字所占的宽度&#xff1b;判断文本内容的实际宽度是否超出了标题盒子的宽度&#xff1b;通过文字所占的宽度累加之和与标题…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么&#xff0c;为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中&#xff0c;我们在使用电子设备时&#xff0c;我们所输入执行的每一条指令最终大多都会作用到硬件上&#xff0c;比如下载一款软件最终会下载到硬盘上&am…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...