C++ 关联式容器:map,multimap,set,multiset
目录
引言
一、关联式容器概述
1.1 与序列式容器的区别
1.2 底层结构
二、set容器详解set介绍
2.1 set的特性
2.2 set的模板参数
2.3 set的常用接口
2.4 set使用示例
三、map容器详解map介绍
3.1 map的特性
3.2 map的模板参数
3.3 map的常用接口
3.4 map使用示例
四、multiset容器详解multiset介绍
4.1 multiset的特性
4.2 multiset的模板参数
4.3 multiset的常用接口
4.4 multiset使用示例
五、multimap容器详解multimap介绍
编辑5.1 multimap的特性
5.2 multimap的模板参数
5.3 multimap的常用接口
5.4 multimap使用示例
六、总结
引言
在C++ 的标准模板库(STL)中,关联式容器是非常重要的一部分,它们为我们提供了高效的数据存储和检索方式。今天,我们就来深入探讨一下其中的 map 和 set 容器,看看它们是如何在实际编程中发挥作用的。
一、关联式容器概述
1.1 与序列式容器的区别
在之前的学习中,我们接触过像 vector 、 list 、 deque 这样的序列式容器,它们底层是线性序列的数据结构,存储的是数据本身。而关联式容器存储的是 <key, value> 结构的键值对,在数据检索时比序列式容器效率更高。
1.2 底层结构
关联式容器根据应用场景不同,主要有树形结构(如红黑树)和哈希结构。今天重点讨论的 map 和 set 以及它们的变体 multimap 、 multiset 底层多采用平衡搜索树(红黑树)实现,这使得容器中的元素是有序的序列。
二、set容器详解set介绍
2.1 set的特性
set 是按照一定次序存储元素的容器,其中元素的 value 也标识它自己(即 value 就是 key ),并且每个 value 必须是唯一的。 set 中的元素不能在容器中修改(元素总是 const ),但可以插入或删除。其内部元素默认按照小于来比较排序。
2.2 set的模板参数
cpptemplate <class T,class Compare = less<T>,class Allocator = allocator<T>> class set;
- T :存储元素的类型,实际底层存储 <value, value> 的键值对。
- Compare :比较器类型,默认按小于比较。
- Allocator :空间配置器,一般不用用户传递。
2.3 set的常用接口
1. 插入元素
cpp#include <set>#include <iostream>int main() {std::set<int> s;std::pair<std::set<int>::iterator, bool> ret = s.insert(5);if (ret.second) {std::cout << "插入成功,元素值为:" << *ret.first << std::endl;} else {std::cout << "插入失败,元素已存在" << std::endl;}return 0;}
1. 删除元素
cpp#include <set>#include <iostream>int main() {std::set<int> s = {1, 2, 3, 4, 5};s.erase(s.find(3)); // 删除值为3的元素for (auto e : s) {std::cout << e << " ";}std::cout << std::endl;return 0;}
1. 查找元素
cpp#include <set>#include <iostream>int main() {std::set<int> s = {1, 2, 3, 4, 5};std::set<int>::iterator it = s.find(3);if (it != s.end()) {std::cout << "找到元素:" << *it << std::endl;} else {std::cout << "未找到元素" << std::endl;}return 0;}
2.4 set使用示例
cpp#include <set>#include <iostream>void TestSet() {int array[] = {1, 3, 5, 7, 9, 2, 4, 6, 8, 0, 1, 3, 5, 7, 9, 2, 4, 6, 8, 0};std::set<int> s(array, array + sizeof(array) / sizeof(array[0]));std::cout << "set的大小为:" << s.size() << std::endl;// 正向打印set中的元素std::cout << "正向打印set元素:";for (auto& e : s) {std::cout << e << " ";}std::cout << std::endl;// 使用迭代器逆向打印set中的元素std::cout << "逆向打印set元素:";for (auto it = s.rbegin(); it != s.rend(); ++it) {std::cout << *it << " ";}std::cout << std::endl;// set中值为3的元素出现了几次std::cout << "值为3的元素个数:" << s.count(3) << std::endl;}int main() {TestSet();return 0;}
三、map容器详解map介绍
3.1 map的特性
map 是关联容器,它按照特定的次序(按照 key 来比较)存储由键值 key 和值 value 组合而成的元素。 key 通常用于排序和唯一地标识元素, value 存储与此键值 key 关联的内容。
3.2 map的模板参数
cpptemplate <class Key,class T,class Compare = less<Key>,class Allocator = allocator<pair<const Key, T>>> class map;
- Key :键值对中 key 的类型。
- T :键值对中 value 的类型。
- Compare :比较器类型,默认按 key 小于比较。
- Allocator :空间配置器。
3.3 map的常用接口
1. 插入元素
cpp#include <map>#include <string>#include <iostream>int main() {std::map<std::string, std::string> m;// 方式一:用pair直接构造键值对插入std::pair<std::map<std::string, std::string>::iterator, bool> ret1 = m.insert(std::pair<std::string, std::string>("apple", "苹果"));if (ret1.second) {std::cout << "插入成功" << std::endl;} else {std::cout << "插入失败,元素已存在" << std::endl;}// 方式二:用make_pair函数构造键值对插入std::pair<std::map<std::string, std::string>::iterator, bool> ret2 = m.insert(std::make_pair("banana", "香蕉"));if (ret2.second) {std::cout << "插入成功" << std::endl;} else {std::cout << "插入失败,元素已存在" << std::endl;}// 方式三:通过operator[]插入m["pear"] = "梨";return 0;}
1. 删除元素
cpp#include <map>#include <string>#include <iostream>int main() {std::map<std::string, std::string> m = {{"apple", "苹果"}, {"banana", "香蕉"}};m.erase("banana");for (const auto& e : m) {std::cout << e.first << " -> " << e.second << std::endl;}return 0;}
1. 查找元素
cpp#include <map>#include <string>#include <iostream>int main() {std::map<std::string, std::string> m = {{"apple", "苹果"}, {"banana", "香蕉"}};std::map<std::string, std::string>::iterator it = m.find("apple");if (it != m.end()) {std::cout << "找到元素:" << it->first << " -> " << it->second << std::endl;} else {std::cout << "未找到元素" << std::endl;}return 0;}
3.4 map使用示例
cpp#include <map>#include <string>#include <iostream>void TestMap() {std::map<std::string, std::string> m;// 向map中插入元素的方式// 将键值对<"peach","桃子">插入map中,用pair直接来构造键值对m.insert(std::pair<std::string, std::string>("peach", "桃子"));// 将键值对<"peach","桃子">插入map中,用make_pair函数来构造键值对m.insert(std::make_pair("banana", "香蕉"));// 借用operator[]向map中插入元素m["apple"] = "苹果";std::cout << "map的大小为:" << m.size() << std::endl;// 用迭代器去遍历map中的元素,可以得到一个按照key排序的序列std::cout << "遍历map元素:" << std::endl;for (const auto& e : m) {std::cout << e.first << " ---> " << e.second << std::endl;}// map中的键值对key一定是唯一的,如果key存在将插入失败auto ret = m.insert(std::make_pair("peach", "桃色"));if (ret.second) {std::cout << "peach,桃色不在map中,已经插入" << std::endl;} else {std::cout << "键值为peach的元素已经存在:" << ret.first->first << " ---> " << ret.first->second << " 插入失败" << std::endl;}// 删除key为"apple"的元素m.erase("apple");if (1 == m.count("apple")) {std::cout << "apple还在" << std::endl;} else {std::cout << "apple被吃了" << std::endl;}}int main() {TestMap();return 0;}
四、multiset容器详解multiset介绍

4.1 multiset的特性

multiset 是按照特定顺序存储元素的容器,其中元素是可以重复的。元素的 value 也会标识它(因为 multiset 中本身存储的就是 <value, value> 组成的键值对),元素的值不能在容器中进行修改(元素总是 const ),但可以从容器中插入或删除。其内部元素默认按照小于来比较排序。
4.2 multiset的模板参数
cpptemplate <class T,class Compare = less<T>,class Allocator = allocator<T>
> class multiset;
与 set 的模板参数类似, T 为存储元素的类型, Compare 是比较器, Allocator 是空间配置器 。
4.3 multiset的常用接口
1. 插入元素
cpp#include <multiset>
#include <iostream>int main() {std::multiset<int> ms;ms.insert(3);ms.insert(3);ms.insert(5);for (auto e : ms) {std::cout << e << " ";}std::cout << std::endl;return 0;
}
1. 删除元素
cpp#include <multiset>
#include <iostream>int main() {std::multiset<int> ms = {1, 3, 3, 5};ms.erase(ms.find(3)); // 删除一个值为3的元素for (auto e : ms) {std::cout << e << " ";}std::cout << std::endl;return 0;
}
4.4 multiset使用示例
cpp#include <set>
#include <iostream>void TestMultiset() {int array[] = {2, 1, 3, 9, 6, 0, 5, 8, 4, 7};std::multiset<int> ms(array, array + sizeof(array) / sizeof(array[0]));for (auto& e : ms) {std::cout << e << " ";}std::cout << std::endl;
}int main() {TestMultiset();return 0;
}
五、multimap容器详解multimap介绍

5.1 multimap的特性

multimap 是关联式容器,它按照特定的顺序,存储由 key 和 value 映射成的键值对 <key, value> ,其中多个键值对之间的 key 是可以重复的。通常按照 key 排序和唯一地标识元素, value 存储与 key 关联的内容。
5.2 multimap的模板参数
cpptemplate <class Key,class T,class Compare = less<Key>,class Allocator = allocator<pair<const Key, T>>
> class multimap;
和 map 的模板参数类似, Key 是键的类型, T 是值的类型, Compare 是比较器, Allocator 是空间配置器。
5.3 multimap的常用接口
1. 插入元素
cpp#include <multimap>
#include <string>
#include <iostream>int main() {std::multimap<std::string, std::string> mm;mm.insert(std::make_pair("fruit", "apple"));mm.insert(std::make_pair("fruit", "banana"));for (const auto& e : mm) {std::cout << e.first << " -> " << e.second << std::endl;}return 0;
}
1. 删除元素
cpp#include <multimap>
#include <string>
#include <iostream>int main() {std::multimap<std::string, std::string> mm = {{"fruit", "apple"}, {"fruit", "banana"}};mm.erase(mm.find("fruit")); // 删除一个key为"fruit"的键值对for (const auto& e : mm) {std::cout << e.first << " -> " << e.second << std::endl;}return 0;
}
5.4 multimap使用示例
cpp#include <multimap>
#include <string>
#include <iostream>void TestMultimap() {std::multimap<std::string, std::string> mm;mm.insert(std::make_pair("person", "Alice"));mm.insert(std::make_pair("person", "Bob"));mm.insert(std::make_pair("animal", "cat"));mm.insert(std::make_pair("animal", "dog"));std::cout << "遍历multimap元素:" << std::endl;for (const auto& e : mm) {std::cout << e.first << " ---> " << e.second << std::endl;}
}int main() {TestMultimap();return 0;
}
容器 | 元素唯一性 | 元素修改 | 底层结构 | 应用场景举例 |
set | 唯一 | 不可修改 | 红黑树 | 红黑树|存储不重复的整数集合,如学生学号集合 |
map | key唯一 | value可修改 | 红黑树 | 红黑树|存储学生学号与成绩的映射关系 |
multiset | 可重复 | 不可修改 | 红黑树 | 统计单词在文本中出现的所有位置(位置可重复) |
multimap | key可重复 | value可修改 | 红黑树 | |红黑树|存储一个班级中所有学生的成绩(可能有重名学生) |
六、总结
set 和 map 作为C++ STL中重要的关联式容器,有着广泛的应用场景。 set 适用于需要存储唯一元素并进行快速查找、排序的场景; map 则适用于需要建立键值对映射关系,通过 key 高效查找 value 的场景。理解它们的特性、接口和底层实现,能帮助我们在实际编程中更高效地使用它们,优化代码性能。希望通过这篇博客,大家能对 set 和 map 有更深入的认识。
相关文章:
C++ 关联式容器:map,multimap,set,multiset
目录 引言 一、关联式容器概述 1.1 与序列式容器的区别 1.2 底层结构 二、set容器详解set介绍 2.1 set的特性 2.2 set的模板参数 2.3 set的常用接口 2.4 set使用示例 三、map容器详解map介绍 3.1 map的特性 3.2 map的模板参数 3.3 map的常用接口 3.4 map使用示例 …...
Discriminative and domain invariant subspace alignment for visual tasks
用于视觉任务的判别性和域不变子空间对齐 作者:Samaneh Rezaei,Jafar Tahmoresnezhad 文章于2018年12月4日收到,2019年5月24日被接受,2019年6月3日在线发表于Iran Journal of Computer Science期刊,DOI: 10.1007/s42…...
comfyui 如何优雅的从Hugging Face 下载模型,文件夹
如下图所示 使用git 下载整个仓库然后把需要的放到对应的位置...
【C++】 —— 笔试刷题day_27
一、kotori和气球 题目解析 这道题,有n中气球,每一种气球有无数多个;现在我们需要将这些气球摆成一排,但是,如果相邻的气球是相同的就会发生爆炸(也就是说,相同的气球相邻的摆法是不合法的&…...
2025年“深圳杯”数学建模挑战赛C题国奖大佬万字思路助攻
完整版1.5万字论文思路和Python代码下载:https://www.jdmm.cc/file/2712073/ 引言 本题目旨在分析分布式能源 (Distributed Generation, DG) 接入配电网系统后带来的风险。核心风险评估公式为: R P_{loss} \times C_{loss} P_{over} \times C_{over}…...
大模型微调指南之 LLaMA-Factory 篇:一键启动LLaMA系列模型高效微调
文章目录 一、简介二、如何安装2.1 安装2.2 校验 三、开始使用3.1 可视化界面3.2 使用命令行3.2.1 模型微调训练3.2.2 模型合并3.2.3 模型推理3.2.4 模型评估 四、高级功能4.1 分布训练4.2 DeepSpeed4.2.1 单机多卡4.2.2 多机多卡 五、日志分析 一、简介 LLaMA-Factory 是一个…...
游戏引擎学习第268天:合并调试链表与分组
回顾并为今天的内容设定基调 我们正在直播中开发完整的游戏,目前调试系统的开发已接近尾声。这个调试系统的构建过程经历了较长的时间,中间还暂停过一段时间去做硬件渲染路径的开发,并在已有的软件渲染路径基础上进行了扩展。后来我们又回到…...
【Linux系统编程】进程属性--标识符
1.PID 1.1什么是PID? 区分进程的唯一性 1.2如何查看进程? ps ajx | head -1 ; ps ajx | grep myproc 或者ps ajx | head -1 && ps ajx | grep myproc | grep -v grep(过滤掉grep本身这个进程) 1.3进程有哪两种&#…...
React文档-State数据扁平化
1、选择 State 结构 思考一下: 如果渲染列表, 并更新列表数据在下面展示~ state 过去常常是这样复制的: items [{ id: 0, title: pretzels}, ...]selectedItem {id: 0, title: pretzels} 改了之后是这样的:items [{ id: 0, …...
kotlin flow防抖
一 防抖设计 ✅ 1. 点击事件的防抖:用于防止频繁触发逻辑 🎯 适用场景: 用户连续快速点击按钮,可能会导致多次发送网络请求、CAN 指令或反复切换状态等副作用。所以我们通常在点击函数中处理防抖,例如: …...
基础语法(二)
Mysql基础语法(二) Mysql基础语法(二)主要介绍Mysql中稍微进阶一点的内容,会稍微有一些难度(博主个人认为)。学习完基础语法(一)和基础语法(二)之…...
FreeTex v0.2.0:功能升级/支持Mac
概述 FreeTex在发布之后,迎来很多反馈,本次根据主流的反馈建议,又进行一轮小升级,正式发布v0.2.0版本,主要升级点如下: 新增识别结果预览显示 Latex识别结果支持格式化输出 软件体积更小,并移…...
MacOS 用brew 安装、配置、启动Redis
MacOS 用brew 安装、配置、启动Redis 一、安装 brew install redis 二、启动 brew services start redis 三、用命令行检测 set name tom get name...
大型旋转机械信号分解算法模块
大型旋转机械信号分解算法模块,作为信号处理算法工具箱的主要功能模块,可应用于各类关键机械部件(轴承、齿轮、转子、联轴器等)的信号分析、故障探测、趋势劣化评估等,采用全Python语言,以B/S模式ÿ…...
Java 中的数据类型误导点!!!
在 Java 中,数据类型分为两大类:基本类型(Primitive Types) 和 引用类型(Reference Types)。它们的存储方式和行为完全不同。 1. 基本类型 Java 有 8 种基本数据类型,它们直接存储值ÿ…...
Linux--JsonCpp
1.JsonCpp 简介 JsonCpp 是一个用于 C 的 JSON 解析和生成库,支持 JSON 数据的读写、解析和序列化。它提供了简单的 API 来操作 JSON 对象、数组、字符串、数字等类型,是 C 开发中处理 JSON 数据的常用工具。 核心功能与类 JsonCpp 主要包含以下核心类…...
cv_connection (像halcon一样对区域进行打散)
主题: 分享一个自己用opencv写的小方法, 可以像halcon的connection算子一样, 对cv2.threshold得到的region进行打散, 并返回一个打散后的不相连的region的列表。 代码如下 def cv_connection(region):# he的拓扑信息为 后一…...
ConcurrentHashMap和锁
文章目录 JDK1.7的分段锁JDK1.8的volatileCAS synchronized可重入锁公平锁和非公平锁悲观锁和乐观锁 JDK1.7的分段锁 数据结构:数组(大数组 Segment 和小数组 HashEntry)链表 #mermaid-svg-dfSgz5E7tBmTbx14 {font-family:"trebuchet …...
黑马k8s(二)
集群环境搭建 1.环境规划 2.环境搭建-主机安装 主节点: 软件选择选择 基础设施服务器,这样安装系统完毕之后,会有很多软件我们可以直接使用了 系统点开,点一下完成 ip地址的设置:要跟虚拟网络编辑器,Net…...
LeetCode热题100--240.搜索二维矩阵--中等
1. 题目 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[1…...
python校园新闻发布管理系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
Spring MVC 视图解析器 (ViewResolver) 如何配置? Spring Boot 是如何自动配置常见视图解析器的?
我们来详细分析一下视图解析器 (ViewResolver) 的配置以及 Spring Boot 是如何自动配置它们的。 视图解析器 (ViewResolver) 是什么? 在 Spring MVC 中,当控制器 (Controller) 方法处理完请求并返回一个逻辑视图名 (String) 时,DispatcherS…...
LeetCode 2918.数组的最小相等和:if-else
【LetMeFly】2918.数组的最小相等和:if-else 力扣题目链接:https://leetcode.cn/problems/minimum-equal-sum-of-two-arrays-after-replacing-zeros/ 给你两个由正整数和 0 组成的数组 nums1 和 nums2 。 你必须将两个数组中的 所有 0 替换为 严格 正…...
C++修炼:stack和queue
Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路! 我的博客:<但凡. 我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》、《C修炼之路》 欢迎点赞,关注&am…...
欧拉计划 Project Euler 69(欧拉总计函数与最大值)题解
欧拉计划 Project Euler 69 题解 题干欧拉总计函数与最大值 思路code 题干 欧拉总计函数与最大值 小于 n n n且与 n n n互质的正整数的数量记为欧拉总计函数 φ ( n ) \varphi(n) φ(n),例如, 1 、 2 、 4 、 5 、 7 1、2、4、5、7 1、2、4、5、7和 8 …...
TCP Socket编程
最基本的Socket编程 想客户端和服务器能在网络中通信,就得使用 Socket 编程,它可以进行跨主机间通信。在创建Socket时可以选择传输层使用TCP还是UDP。相对于TCP来说,UDP更为简单,下面以TCP为例。 TCP服务端要先建立起来…...
[CLS] 向量是 BERT 类模型中一个特别重要的输出向量,它代表整个句子或文本的全局语义信息
[CLS] 向量是 BERT 类模型中一个特别重要的输出向量,它代表整个句子或文本的全局语义信息。 ✅ 什么是 [CLS] 在 BERT 模型中,每条输入前会加一个特殊的 token:[CLS](classification 的缩写)。这个 token 没有具体语义…...
47.电压跌落与瞬时中断干扰的防护改善措施
电压跌落与瞬时中断干扰的防护改善措施 1. 电压跌落与瞬时中断的影响机理2. 解决措施 1. 电压跌落与瞬时中断的影响机理 跌落发生的常见场景如下: (1)电源插头接触不良,瞬态中断即刻恢复; (2)电…...
LeetCode热题100 两数之和
目录 两数之和题目解析方法一暴力求解代码 方法二哈希代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿…...
【无标题】I/O复用(epoll)三者区别▲
一、SOCKET-IO复用技术 定义:SOCKET - IO复用技术是一种高效处理多个套接字(socket)的手段,能让单个线程同时监听多个文件描述符(如套接字)上的I/O事件(像可读、可写、异常)&#x…...
【数据结构】子串、前缀
子串 (Substring) 字符串中连续的一段字符序列,例如 "abc" 是 "abcd" 的子串。 特点:必须连续,顺序不可改变。 子序列 (Subsequence) 字符串中不连续但保持顺序的字符序列,例如 "acd" 是 "…...
[docker基础四]容器虚拟化基础之 LXC
目录 一 认识LXC 二 LXC容器操作实战 1)实战目的 2)基础知识 lxc-checkconfig lxc-create lxc-start lxc-ls lxc-info lxc-attach lxc-stop lxc-destory 3)安装LXC(我的是Ubuntu) 4)操作实战 1. 检查 lxc 是否运行…...
leetcode 2918. 数组的最小相等和 中等
给你两个由正整数和 0 组成的数组 nums1 和 nums2 。 你必须将两个数组中的 所有 0 替换为 严格 正整数,并且满足两个数组中所有元素的和 相等 。 返回 最小 相等和 ,如果无法使两数组相等,则返回 -1 。 示例 1: 输入…...
RT-Thread 深入系列 Part 5:物联网与网络应用实战
摘要 本文聚焦 RT-Thread 在物联网场景下的网络应用实战,从网络协议栈集成到 MQTT/CoAP/HTTP 客户端实现,再到 mbedTLS 安全通信与 OTA 升级,最后以阿里云、腾讯云和 OneNet 平台对接为案例,完整呈现端到端的物联网解决方案落地过程。 目录 网络协议栈:LWIP 与网络设备 MQ…...
onGAU:简化的生成式 AI UI界面,一个非常简单的 AI 图像生成器 UI 界面,使用 Dear PyGui 和 Diffusers 构建。
一、软件介绍 文末提供程序和源码下载 onGAU:简化的生成式 AI UI界面开源程序,一个非常简单的 AI 图像生成器 UI 界面,使用 Dear PyGui 和 Diffusers 构建。 二、Installation 安装 文末下载后解压缩 Run install.py with python to setup…...
Linux系统入门第十二章 --Shell编程之正则表达式
一、正则表达式 之前学习了 Shell 脚本的基础用法,已经可以利用条件判断、循环等语句编辑 Shell脚本。接下来我们将开始介绍一个很重要的概念-正则表达式(RegularExpression,RE) 1.正则表达式的定义 正则表达式又称正规表达式、常规表达式。在代码中常…...
Ubuntu22.04怎么退出Emergency Mode(紧急模式)
1.使用nano /etc/fstab命令进入fstab文件下; 2.将挂载项首行加#注释掉,修改完之后使用ctrlX退出; 3.重启即可退出紧急模式!...
IC ATE集成电路测试学习——开尔文连接
首先,我们先了解一下ATE在测试时的PMU测量原理。 驱动线路和感知线路 为了提升 PMU 驱动电压的精确度,常使用 4 条线路的结构:两条驱动线路传输电流,另两条感知线路监测我们感兴趣的点(通常是DUT)的电压。…...
Ubuntu 与 Windows 双系统环境下 NTFS 分区挂载教程
Ubuntu 与 Windows 双系统环境下 NTFS 分区挂载教程 摘要 本技术指南针对Ubuntu与Windows双系统用户,系统阐述NTFS分区挂载的技术原理与操作流程。通过规范的技术说明和专业的故障排除方案,帮助用户在异构操作系统环境下实现文件系统的无缝访问&#x…...
C++学习-入门到精通-【6】指针
C学习-入门到精通-【6】指针 指针 C学习-入门到精通-【6】指针一、指针的初始化二、指针运算符地址运算符&间接引用运算符* 三、使用指针的按引用传递方式四、内置数组标准库函数的begin和end内置数组的局限性 五、使用const修饰指针 一、指针的初始化 指针在声明或赋值时…...
数据集-目标检测系列- 冥想 检测数据集 close_eye>> DataBall
数据集-目标检测系列- 冥想 检测数据集 close * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview 2)数据集训练、推理相关项目:GitHub - XIAN-HHappy/ultralytics-yolo-…...
CoAP 协议介绍及应用场景
CoAP 协议,即受限应用协议(Constrained Application Protocol),是专为资源受限的设备和网络设计的一种应用层协议 ,旨在让小型、低功耗的设备能够接入物联网(IoT),并以最小的资源与更…...
【并发编程】基于 Redis 手写分布式锁
目录 一、基于 Redis 演示超卖现象 1.1 Redis 超卖现象 1.2 超卖现象解决方案 二、Redis 的乐观锁机制 2.1 原生客户端演示 2.2 业务代码实现 三、单机部署 Redis 实现分布式锁 3.1 分布式锁的演变和升级 3.2 setnx 实现分布式锁 3.2.1 递归调用实现分布式锁 3.2.2 循…...
adb命令查询不到设备?
一、背景 -----以鸿蒙系统为例,其他系统类似--- 1、确保adb在电脑上成功安装 2 、连接手机 adb devices 列表中无显示设备 二、解决 1. 手机打开开发者模式 手机型号不同,所以选项不一样 2. 一般流程是:设置--搜索--“开发”--会出现开…...
JavaScript 数组去重:11 种方法对比与实战指南
文章目录 前言一、使用 Set 数据结构二、使用 filter indexOf三、使用 reduce 累加器四、双重 for 循环五、利用对象属性唯一性六、先排序后去重七、使用 Map 数据结构八、使用 includes 方法九、优化处理 NaN 的 filter 方法十、利用 findIndex十一.利用Set和展开运算符处理多…...
SlideLoss与FocalLoss在YOLOv8分类损失中的应用及性能分析
文章目录 一、引言二、YOLOv8 损失函数概述三、SlideLoss 详解(一)SlideLoss 的原理(二)SlideLoss 的代码实现 四、FocalLoss 分类损失函数详解(一)FocalLoss 的原理(二)FocalLoss 的…...
AI 驱动数据库交互技术路线详解:角色、提示词工程与输入输出分析
引言 在人工智能与数据库深度融合的趋势下,理解AI在数据库交互流程中的具体角色、提示词工程的运用以及各步骤的输入输出情况,对于把握这一先进技术路线至关重要。本文将对其展开详细剖析。 一、AI 在数据库交互流程中的角色 (一࿰…...
Jmeter中的BeanShell如何使用?
在JMeter中,BeanShell 是一种基于Java语法的脚本工具,可以通过编写脚本实现动态逻辑处理、变量操作、条件判断等功能。以下是BeanShell的详细使用方法和常见场景示例: 1. BeanShell组件类型 JMeter提供多种BeanShell组件,根据场…...
JDBC工具类的三个版本
一、JDBC连接数据库的7个步骤 1、加载驱动 2、获取连接 3、编写sql 4、获取执行sql的stmt对象 有两种 stmt(存在sql注入问题 字符串拼接) pstmt(预编译可以防止sql注入) 5、执行sql 拿到结果集 6、遍历结果集 7、关闭资源…...
安达发|制药车间生产计划准备性的关键影响因素及优化策略研究
在高度规范的制药行业,生产计划的准备性直接影响企业的运营效率和合规水平。根据FDA统计,2024年因生产计划不当导致的药品短缺案例增加了23%,暴露出制药企业在生产计划管理方面的系统性挑战。本文将从设备、物料、人员、环境、法规五个维度&a…...