C++笔记-set和map的使用(包含multiset和multimap的讲解)
1.序列式容器和关联式容器
前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系,比如交换一下,他依旧是序列式容器。顺序容器中的元素是按他们在容器中的存储位置来顺序保存和访问的。
关联式容器也是用来存储数据的,与序列式容器不同的是,关联式容器逻辑结构通常是非线性结构,两个位置有紧密的关联关系,交换一下,他的存储结构就被破坏了。顺序容器中的元素是按关键字来保存和访问的。关联式容器有map/set系列和unordered_map/unordered_set系列。
本章节讲解的map和set底层是红黑树,红黑树是一颗平衡二叉搜索树。set是key搜索场景的结构, map是key/value搜索场景的结构。
1.set系列的使用
1.1set的介绍
set就是我们上篇所实现的二叉搜索树的key搜索场景,它默认就是不存在重复数据的二叉搜索树,尔汗有重复数据的就是后面要讲的mutiset。
从上图可以看出,set的模板参数中含有三个不同的类型,第一个想必大家都知道,就是里面存储数据的类型。
第二个我们之前也讲过,就是仿函数,可以控制数据的输出顺序。
第三个是内存池,这部分知识我们还没有了解,这里就先跳过。
从以上图片可以看出,和我们之前所学的其它容器还是比较相似的,使用起来也非常相似:
这里可以看到set自动就对所传入的数据进行去重,并且按照升序排序的方式,而我们如果想让其输出的方式是从大到小,也可以利用仿函数:
并且我们是不能修改set中的值:
不能修改的原因呢我们上一篇已经讲过,会破坏二叉搜索树的结构,如果能修改那么二叉搜索树就失去了意义。
下面来讲解set中一些接口的使用方法。
1.2find
set中的find接口通过传入的值进行查找,如果找到了就返回相应的迭代器,也就是对应数据的位置,如果没有找到,就返回end()迭代器。
这里我们通过find接口来找5这个数据,结果显示找到了,说明此时返回的迭代器并不是end()。
而如果我们来找1这个数据,结果并没有找到,说明此时find返回的就是end()。
1.3erase
erase和我们之前所学容器的erase有些不一样,从上图对set的介绍可以看出,除了我们常见的void返回值以外,还有个size_type做返回值的。
而在set中这个size_type就是0或者1,删除成功返回1,删除失败就返回0,而这样设计的原因是为了和mutiset相照应。
可以看出此时的返回值时1,说明删除成功,我们通过再次打印出set中的数据也可以看到2已经被删除。
这里我们要删除1,发现删除失败,此时erase的返回值就为0。
1.4count
count接口就是来查找某个数据有几个,而在set中我们知道数据要么没有,要么只有一个,所以在set中count主要用来判断传入的数据在不在。
count的返回值依旧是1或者0,我们可以利用count的这个功能来写一种题型:
比如就像力扣上的这种题,我们就可以利用set来解决会更加的简单:
因为一个数组中蛊蛾可能会有重复的数据,所以利用set的去重特性以及count判断数据在不在,这道题写起来就极为简单。
1.5low_bound和upper_bound
low_bound的作用是对于所传入的数据找出set中大于等于这个数据的第一个值的位置,所以返回值也是迭代器。
upper_bound的作用是对于所传入的数据找出set中大于这个数据的第一个值的位置。
两者的区别就是一个是>=,一个是>。
那么这两个功能有什么用呢?
这两个配合着erase接口就可以实现删除set中的某段内容,就如上面的例子所示,>=30的第一个数就是30,而>70的第一个数就是80,但是为什么没有删除80呢?
因为在c++中的删除范围都是左闭右开,在这里就是[30,80),所以删除的就是30到70这几个数据,当然我们也可以改一下数据再看看到底是不是这样:
可以看出,这里我传的并不是set中的数据,和上面一样>=25的第一个数就是30,>75的第一个数是80,所以结果是一样的。
2.multiset
multiset和set差不多,无非就是一个不去重,一个去重。从上图也可以看出,mutiset和set接口都一模一样,我们下面来看一下mutiset的基本使用:
可以看出multiset并没有去重,并且和set一样都是升序排列。
当然。multiset和set的区别并不是只有这一点,在某些接口中也有细微的差别。
2.1find
find呢,在multiset返回的是某个数据在中序中的第一个位置,何为在中序中的第一个位置呢?
就如上面所查找的4,中序中的第一个4就是最左的那个位置,从上面找到后继续查找4也可以看出找的就是第一个位置,所以才能将后面的4都打印出来。
2.3erase
此时在multiset中erase返回就不只是0或1了,所以上面的set中的erase返回值也是size_type,就是为了和multiset相照应,而是返回这个数据有几个被删掉了。
当然,如果只想删除一个,我们就要指定对应的位置进行删除,比如:
这里我们利用find找到了第一个4所在的位置,并将其传给erase,这样就可以只删除一个4。
2.4count
在multiset中count就真正变为统计每个数有几个,这里可以看出统计了4,2,6的数量。
3.map
3.1map的介绍
map就是我们之前讲的key/value搜索场景,在map的解释中呢我们可以看到有一个pair的模板,这个pair是什么呢?
pair其实是一个结构体,里面保存着key和value,那么可能有人会有疑惑:为什么不和我们上一篇所讲的放在一块呢?
因为我们要对map的迭代器进行解引用啊,如果放在一起,解引用能解出来两个值吗?
显然是不行的,所以就没有放在一块,它多写个结构体就是这样:
就是把之前的key和val更换为pair,就是多加了一步。
而我们使用insert赋值时最简单的方法就是利用隐式类型转换,另外注意我们在打印出key和val时是上述的方式来打印,利用迭代器也是一样:
当然,也可以用下面这种方式:
这也是我们之前讲的->符号重载。
我们是无法直接对迭代器进行解引用,为什么呢?
因为底层的pair并没有重载流插入<<和流提取>>,所以我们是不能直接对迭代器直接接引用进行使用。
3.2[]符号重载
看到这个接口,可能有人会有疑惑:[]符号不是底层是数组才会用[]来进行下标访问吗?
是的,不过map的[]并不是用来进行下标访问的,而是另有用处:
通过看[]符号重载的基本格式我们可以看出,[]符号传入的值是key,而返回的值却是value,而要理解[]符号重载的原理我们先看一个例子:
比如我们要插入上述的几种水果并统计它们的次数,按照正常的逻辑我们应该用上面的代码来写对吧,但是我们再看:
而当我们利用[]来写时,一行代码就搞定了,有人会有疑惑:为什么这么写就和前面是一样的效果呢?
其实原理就和前面的代码是一样的,其实[]符号重载就是利用insert接口来实现的,大家可以设想一下,我来查找这个数据返回的是它的second,如果有的情况下++即可,但是没有的话怎么办?
那肯定得先插入这个数据对吧,所以才要利用insert来实现,那现在我们再看insert接口:
我们来看insert的第一种方式,这里也有一个pair,并且和我们上面讲的pair参数并不一样,确实是这样的,大家不要将两者混为一谈,这是两个不同pair。
而第二张图呢就是对这个pair的解释,意思是:根据你传入的key,第一个参数iterator指向的是新插入的数据的位置或者是已经在map中存在的数据的位置,而第二个参数bool在是插入新的数据时默认是true,而如果要插入的数据已经存在,那么就是false。
也就是说,不管你传入的key是否存在,pair中的第一个参数iterator都会获得一个位置,这也是[]符号重载能实现的关键。
现在我们大概来看看[]符号重载是怎么实现的:
大概就是这么个逻辑,这里要注意insert的第二个参数我们可以传匿名对象,这样就会去调用相应的默认构造函数,比如:int就会默认是0等。
而当我们通过第一段代码得到pair时,我们就可以访问其中的第一个参数iterator得到对应的位置,而第二段代码中的ret.first就是iterator,再通过->来访问结构体中的second,也就是水果的次数。
通过[]符号重载,我们既实现了插入新的数据,又能统计每个水果出现的次数。
基于[]的这个特性,我们还可以这样写:
再插入数据时我们可以不直接调用insert接口,而是利用[]符号重载来实现。
4.multimap
multimap和map也是几乎没什么区别,和上面的set/multiset情况是一样的,multimap可以插入重复的数据。
并且我们可以看到multimap是没有[]符号重载的,没有的原因大家想想都应该清楚,如果支持的话并且其中有重复值,那么我该返回哪个的second呢?
multimap剩下的接口和map是一模一样的,这里我再讲一个接口:equal_range
equal_range这个接口的功能就是返回key值相等的一段区间,从它的返回值也可以看出也是pair,第一个参数就是起始位置的iterator,第二个参数就是最后一个位置的下一个位置的iterator,因为是左闭右开嘛。
这就是equal_range的基本应用场景,而在map中这个方法显然只能返回一个元素。
这个接口包括multimap用的都不多,了解一下即可。
以上就是set和map的使用的内容。
相关文章:
C++笔记-set和map的使用(包含multiset和multimap的讲解)
1.序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系࿰…...
GLPK(GNU线性规划工具包)介绍
GLPK全称为GNU Linear Programming Kit(GNU线性规划工具包),可从 https://sourceforge.net/projects/winglpk/ 下载源码及二进制库,最新版本为4.65。也可从 https://ftp.gnu.org/gnu/glpk/ 下载,仅包含源码,最新版本为5.0。 GLPK是…...
技嘉主板BIOS升级
截图可能不同的BIOS长的不一样,但大概相同,BIOS不下错,逐个版本升级就没问题 准备工作 准备工作一个fat32格式的U盘,用来存放BIOS确认主板型号 和当前BIOS版本 方式1:去系统信息里面 方式2: 去BIOS设置…...
自定义类型:结构体进阶
一、结构体类型的声明 前⾯我们在学习操作符和初阶结构体的时候,已经学习了结构体的知识,这⾥稍微复习⼀下。 1.1结构体的回顾 结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag…...
linux perf top分析系统性能
1,看到内核宏是否支持perf功能 perf top -g 查看linux 内核宏定义 CONFIG_PERF_EVENTS=y CONFIG_HAVE_PERF_EVENTS=y CONFIG_FRAME_POINTER=y # 确保帧指针支持以捕获完整堆栈 2,使用perf top -g 报错 Access to performance monitoring and observability operations is l…...
串口屏调试 1.0
http://wiki.tjc1688.com 先把商家的链接贴过来 淘晶驰T1系列3.2寸串口屏tft液晶屏显示屏HMI触摸屏超12864液晶屏 这是主包的型号 打开这个玩意 有十个基本的功能区 新建工程 在界面的右边,指令一定要写在page前面,这里的波特率等等什么的都可以…...
Python面向对象编程:初识类与对象
面向对象编程(OOP)是Python编程中最重要的范式之一。本文将从零开始介绍Python中类和对象的基本概念,帮助初学者快速掌握面向对象编程的核心思想。 一、什么是面向对象编程? 面向对象编程(Object-Oriented Programming)是一种以"对象"为核心…...
局域网常用的测速工具,Iperf3使用教程
目录 下载方式 Windows Linux 使用方法:测试局域网带宽 步骤一:服务端准备 步骤二:客户端发起连接 步骤三:查看结果 参数说明 1. Iperf常用参数(测试够用) 2. 通用参数(Server端和Cli…...
[架构之美]linux常见故障问题解决方案(十九)
[架构之美]linux下常见故障问题解决方案 一,文本文件忙 问题一:rootwh-VMware-Virtual-Platform:/home/hail# cp /root/containerd/bin/* /usr/bin/ cp: 无法创建普通文件 ‘/usr/bin/containerd’: 文本文件忙 在Linux系统中遇到“文本文件忙”错误时…...
Java与Go语言对比教程
Java vs. Go:程序员的双节棍与瑞士军刀之战 🎯 先看一张灵魂对比图 🤖 Java老大哥 🚀 Go小钢炮 出生年份 1995(中年稳健) 2009(年轻活力&…...
计算机大类专业数据结构下半期实验练习题
1068: 图的按录入顺序深度优先搜索 #include"iostream" using namespace std; #include"cstring" int visited[100]; char s[100]; int a[100][100]; int n; void dfs(int k,int n) {if(visited[k]0){visited[k]1;cout<<s[k];for(int i0;i<n;i){i…...
Android 关闭Activity切换过渡动画
Android 9.0以前关闭过渡动画效果只需要把开发者模式中过渡动画缩放设为0就可以。也就是把def_window_transition_scale改为0% frameworks/base/packages/SettingsProvider/res/values/defaults.xml <fraction name"def_window_transition_scale">100%<…...
iperf3的介绍与舒勇
在 CentOS 7 中使用 iperf3 进行网络性能测试,分为客户端和服务器两部分。以下是使用步骤: 1. 安装 iperf3 首先,你需要在 CentOS 7 上安装 iperf3。可以通过以下命令进行安装: sudo yum install epel-release sudo yum install…...
Python 包管理新选择:uv
在 Python 中,uv 是由 Astral 公司开发的 Rust 高性能包管理工具,旨在替代传统 pip 并提供更快的依赖管理、Python 版本控制等功能。 https://github.com/astral-sh/uv 在 github 上已有 53k star 一、uv 的核心优势 极速性能:比 pip 快 10-100 倍。多版本 Python 管理:支…...
从需求到用例的AI路径:准确率与挑战
用工作流生成测试用例和自动化测试脚本! 引言:用例的黄金起点 在软件工程中,“测试用例”是连接需求理解与质量保障之间的关键桥梁。一份高质量的测试用例,不仅是验证功能实现是否符合需求的工具,更是产品风险感知、用…...
JavaSE核心知识点02面向对象编程02-06(泛型)
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点02面向对象编程02-06&#…...
xml与注解的区别
功能xml配置注解定义bean bean标签 id属性 class属性 Component Controller Service Repository ComponentScan 设置依赖注入 setter注入(set方法) 构造器注入(构造方法) Autowired Qualifier Value 配置第三方bean bean标签 静…...
进阶 DFS 学习笔记
字数:12017字。 文章盗的图注明了出处,全部出自 y 总的算法提高课。 不知道为啥这个时候才开始学这个东西,好像是很多同龄人都已经学完了。 进阶 DFS 具体来说好几个东西,所以可能内容有一些些多。 默认 DFS 和 BFS 已经掌握了…...
计算机设计大赛山东省赛区软件开发赛道线上答辩复盘
流程回顾: 1.抽签顺序: 抽签顺序并不一定代表是最终顺序,要注意看通知不要遗漏。 2.答辩形式: 线上答辩,加入腾讯会议,进会议时自己的备注是作品编号,等轮到自己组答辩时主持人会把人拉进来…...
第7次课 栈A
课堂学习 栈(stack) 是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子,如果想取出底部的盘子,则需要先将上面的盘子依次移走。我们将盘子替换为各种类型的元素(如整数、字符、对象等&…...
TXT编码转换工具iconv
iconv.exe是实现TXT编码转换的命令行工具,支持几百种编码格式的转换,利用它可以在自主开发程序上实现TXT文档编码的自动转换。 一、命令参数格式 Usage: iconv [-c] [-s] [-f fromcode] [-t tocode] [file ...] or: iconv -l 二、转换的示例 将UTF-8…...
基于Spring Boot + Vue的高校心理教育辅导系统
一、项目背景介绍 随着高校对学生心理健康教育的重视,传统的人工心理辅导与测评模式已经难以满足广大师生的个性化需求。为了提高心理服务的效率、便捷度和覆盖范围,本项目开发了一个高校心理教育辅导系统,集成心理评测、辅导预约、留言交流…...
关于甲骨文(oracle cloud)丢失MFA的解决方案
前两年,申请了一个招商的多币种信用卡,然后就从网上撸了一个oracle的免费1h1g的服务器。 用了一段时间,人家要启用MFA验证。 啥叫MFA验证,类似与短信验证吧,就是绑定一个手机,然后下载一个app,每…...
Linux系统管理与编程17:自动化部署ftp服务
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 #virtual用户管理:passerbyA、captain和admin三个虚拟用户 # passerbyA只能看,captain可看读写上传,但不能删除。admin全部权限 [rootshell shell]…...
C++STL——stack,queue
stack与queue 前言容器适配器deque 前言 本篇主要讲解stack与queue的底层,但并不会进行实现,stack的接口 queue的接口 ,关于stack与queue的接口在这里不做讲解,因为通过前面的对STL的学习,这些接口都是大同小异的。 …...
HC-SR04超声波测距传感器
1.基本信息 供电电压5v,测量范围2cm~400cm,测量精度正负3mm,超声波频率40khz 2.连接引脚: 3.工作原理 TRIG引脚发送至少10us的高电平信号,ECHO引脚负责接受信号; 接受方式:计算测量高电平持续的时间,从一…...
内存安全暗战:从 CVE-2025-21298 看 C 语言防御体系的范式革命
引言 2025 年 3 月,美国 CERT 发布的《年度漏洞报告》揭示了触目惊心的数据:C/C 相关漏洞占全年高危漏洞的 68%,其中内存安全问题贡献了 92% 的远程代码执行风险。当 CVE-2025-21298 漏洞在某工业控制软件中被利用,导致欧洲某核电…...
Linux笔记---System V共享内存
1. System V共享内存简介 System V共享内存是一种在Linux系统中用于进程间通信的机制。顾名思义,就是申请一段可供多个进程共享的内存,以用于进程间通信,相对于管道机制要更加直接。 1.1 原理 System V共享内存通过创建和使用一个特定的IP…...
MySQL 1366 - Incorrect string value:错误
MySQL 1366 - Incorrect string value:错误 错误如何发生发生原因: 解决方法第一种尝试第二种尝试 错误 如何发生 在给MySQL添加数据的时候发生了下面的错误 insert into sys_dept values(100, 0, 0, 若依科技, 0, 若依, 15888888888, ryqq.com, 0,…...
慈缘基金会“蝴蝶飞”助西藏女孩白玛卓嘎“折翼重生”
历经六个月、178天的艰难治疗,来自西藏拉萨的15岁女孩白玛卓嘎,终于在4月底挺直脊梁,带着自信的笑容踏上了回家的路。这场跨越雪域高原与首都北京的“生命蜕变之旅”,不仅改写了这位藏族少女的人生轨迹,更见证了公益力…...
【生存技能】ubuntu 24.04 如何pip install
目录 原因解决方案说明 在接手一个新项目需要安装python库时弹出了以下提示: 原因 这个报错是因为在ubuntu中尝试直接使用 pip 安装 Python 包到系统环境中,ubuntu 系统 出于稳定性考虑禁止了这种操作 这里的kali是因为这台机器的用户起名叫kali,我也不知道为什么…...
TDengine 在智能制造中的核心价值
简介 智能制造与数据库技术的深度融合,已成为现代工业技术进步的一个重要里程碑。随着信息技术的飞速发展,智能制造已经成为推动工业转型升级的关键动力。在这一进程中,数据库技术扮演着不可或缺的角色,它不仅承载着海量的生产数…...
代码随想录第41天:图论2(岛屿系列)
一、岛屿数量(Kamacoder 99) 深度优先搜索: # 定义四个方向:右、下、左、上,用于 DFS 中四向遍历 direction [[0, 1], [1, 0], [0, -1], [-1, 0]]def dfs(grid, visited, x, y):"""对一块陆地进行深度…...
C语言复习--柔性数组
柔性数组是C99中提出的一个概念.结构体中的最后⼀个元素允许是未知大小的数组,这就叫做柔性数组成员。 格式大概如下 struct S { int a; char b; int arr[];//柔性数组 }; 也可以写成 struct S { int a; char b; int arr[0];//柔性数组 }; …...
《Python星球日记》 第55天:迁移学习与预训练模型
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、迁移学习基础1. 什么是迁移学习?2. 迁移学习的优势3. 迁移学习的…...
Python项目75:PyInstaller+Tkinter+subprocess打包工具1.0(安排 !!)
这个打包工具包含以下功能: 1.主要功能:选择Python脚本文件,设置打包选项(单文件打包、无控制台窗口),自定义程序图标,指定输出目录,实时显示打包日志。 2.自适应布局改进ÿ…...
互联网大厂Java面试实录:从基础到微服务的深度考察
互联网大厂Java面试实录:从基础到微服务的深度考察 面试场景 面试官:风清扬(严肃且技术深厚) 求职者:令狐冲(技术扎实但偶尔含糊) 第一轮:Java基础与框架 风清扬:令狐…...
学习黑客5 分钟深入浅出理解Linux进程管理
5 分钟深入浅出理解Linux进程管理 🖥️ 大家好!今天我们将探索Linux系统中的进程管理——这是理解系统运行机制和进行安全分析的基础知识。在TryHackMe平台上进行网络安全学习时,了解进程如何工作以及如何监控和控制它们,对于识别…...
Kubernetes应用发布方式完整流程指南
Kubernetes(K8s)作为容器编排领域的核心工具,其应用发布流程体现了自动化、弹性和可观测性的优势。本文将通过一个Tomcat应用的示例,详细讲解从配置编写到高级发布的完整流程,帮助开发者掌握Kubernetes应用部署的核心步…...
JVM——即时编译器的中间表达形式
中间表达形式(IR):编译器的核心抽象层 1. IR的本质与作用 在编译原理的体系中,中间表达形式(Intermediate Representation, IR)是连接编译器前端与后端的桥梁。前端负责将源代码转换为IR,而后…...
Js 判断浏览器cookie 是否启用
验证时 google浏览器 135.0.7049.117 不生效 cookie.html <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><title>Cookie 检测</title> </head> <body><h1>检测是否启用 Cookie<…...
数字相机的快门结构
数字相机(DC/DSLR等)的快门结构和传统相机有所不同,除了机械快门以外,还存在电子快门,实际上是二者的混合体。我写这篇文章大概介绍一下数字相机的快门结构,希望能抛砖引玉。 要讨论数字相机的快门结构,首先先要了解一下数字相机的结构分类,根据成像原理不同,数字相机大…...
LeetCode --- 448 周赛
题目列表 3536. 两个数字的最大乘积 3537. 填充特殊网格 3538. 合并得到最小旅行时间 3539. 魔法序列的数组乘积之和 一、两个数字的最大乘积 由于数据都是正数,所以乘积最大的两个数,本质就是找数组中最大的两个数即可,可以排序后直接找到…...
添加物体.
在cesium中我们可以添加物体进入地图.我们以广州塔为例 //生成广州塔的位置var position2 Cesium.Cartesian3.fromDegrees(113.3191,23.109,100)viewer.camera.setView({//指定相机位置destination: position2, 运行后如图 我们使用cesium官网提供的代码为广州塔在地图上标点…...
ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例
ABB电机控制和保护单元与Profibus DP主站转Modbus TCP网关快速通讯案例 在现代工业自动化系统中,设备之间的互联互通至关重要。Profibus DP和Modbus TCP是两种常见的通信协议,分别应用于不同的场景。为了实现这两种协议的相互转换,Profibus …...
Yocto中`${S}`和`${WORKDIR}`的联系与区别
在Yocto项目中,${S}和${WORKDIR}是构建过程中两个核心路径变量,它们的关系及用途如下: 定义与层级关系${WORKDIR}(工作目录) 是Recipe所有任务执行的基础目录,路径结构为: build/tmp/work/<arch>/<recipe-name>/<version>/。 该目录包含源码解压后的所…...
CDGP历次主观题真题回忆
(一)【论述】 1如何设计企业的数据安全体系?活动+方法+DSMM 2如何管理公司混乱的数据质量?活动+遵循原则+建立质量维度+质量改进生命周期+高阶指标。...
Java学习手册:Spring Cloud 组件详解
一、服务发现组件 - Eureka 核心概念 :Eureka 是一个服务发现组件,包含 Eureka Server 和 Eureka Client 两部分。Eureka Server 作为服务注册中心,负责维护服务实例的注册信息;Eureka Client 则是集成在应用中的客户端࿰…...
【大模型】使用 LLaMA-Factory 进行大模型微调:从入门到精通
使用 LLaMA-Factory 进行模型微调:从入门到精通 一、环境搭建:奠定微调基础(一)安装依赖工具(二)创建 conda 环境(三)克隆仓库并安装依赖 二、数据准备:微调的基石&#…...
sensitive-word-admin v2.0.0 全新 ui 版本发布!vue+前后端分离
前言 sensitive-word-admin 最初的定位是让大家知道如何使用 sensitive-word,所以开始想做个简单的例子。 不过秉持着把一个工具做好的原则,也收到很多小伙伴的建议。 v2.0.0 在 ruoyi-vue(也非常感谢若依作者多年来的无私奉献)…...