get_or_insert_with

get_or_insert_with 是 Rust 中集合类型(如 HashMapHashSet, 或某些自定义类型如 BTreeMap)提供的方法之一,用于处理“如果不存在则插入”的场景。它旨在简化在集合中查找某个键(key),如果该键不存在,则使用给定闭包(closure)提供的值来初始化并插入键值对的操作。这样,程序员可以避免先检查键是否存在,再决定是否插入,而是通过一个简洁的方法调用来完成这一系列操作。

get_or_insert_with 被用于一个自定义的数据结构 Node 的嵌套结构中,具体解释如下:

fn insert(&mut self, word: &str) {let mut node = &mut self.root; // 初始化指向根节点的可变引用// 逐个字符插入for c in word.as_bytes() {let index = (c - b'a') as usize; // 计算字符在子节点数组中的索引// 获取或插入子节点let next = &mut node.children[index];node = next.get_or_insert_with(Box::<Node>::default);}node.end = true; // 标记当前节点为单词结束节点
}

  • 在这个上下文中:

  • node 是一个指向当前内部节点的可变引用。
  • children 是当前节点的子节点数组。
  • next 试图获取 node.children[index] 处的子节点的可变引用。
  • get_or_insert_with(Box::<Node>::default) 执行以下逻辑:
    • 如果 node.children[index] 已经存在(即非 None),那么直接返回其可变引用。
    • 如果 node.children[index] 不存在(即 None),则调用 Box::<Node>::default() 创建一个新的 Node 对象(默认实例化),将其封装在一个 Box 中,并将这个 Box<Node> 插入到 children[index] 位置,最后返回新插入节点的可变引用。

通过这种方式,循环遍历输入字符串 word 的每个字符时,会确保沿着路径创建所有必要的子节点(如果它们尚不存在的话),最终达到插入整个单词的目的。get_or_insert_with 方法在此处有效地实现了自动构建字典树(Trie)的过程,同时避免了重复的查找和插入操作。

总之,get_or_insert_with 是一个便捷的工具方法,用于在集合中查找给定键,如果找不到则使用提供的闭包生成一个值插入到集合中,并返回与该键关联的新值或已存在的值的引用。在上述代码中,它被用于构建字典树结构,以支持高效地插入和查询单词。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

把 WordPress 变成 BaaS 服务:API 调用指南

有了前面两篇内容的铺垫&#xff0c;我们来聊聊 WordPress 作为 CMS / BaaS 服务使用时绕不开的问题&#xff0c;API 调用。 这篇内容同样的&#xff0c;会尽量少贴代码&#xff0c;简单的讲清楚一件事&#xff0c;降低阅读负担。 写在前面 首先&#xff0c;我们需要进行清晰…

Docker Compose 的安装和使用详解

Docker Compose 是 Docker 官方开源的容器编排(Orchestration)项目之一,用于快速部署分布式应用。本文将介绍 Docker Compose 的基本概念、安装流程及使用方法。 简介 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。从功能上看,Docker C…

卡车卫星定位系统 user/create 未授权密码重置漏洞复现

0x01 产品简介 卡车卫星定位系统是一种基于卫星通信和导航技术的系统,用于对卡车的位置进行精确测定。该系统主要由一组卫星、地面控制站和接收器组成。通过测量卫星信号的传播时间,可以确定接收器(即卡车上的定位设备)所在的位置。具有高精度、高可靠性、全球覆盖等特点,…

上位机图像处理和嵌入式模块部署(树莓派4b的一种固件部署方法)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果软件开发好了之后&#xff0c;下面就是实施和部署。对于树莓派4b来说&#xff0c;部署其实就是烧录卡和拷贝文件。之前我们烧录卡&#xff0c;…

SpringBoot如何集成MyBatis可以通过几个简单的步骤来实现

在SpringBoot中集成MyBatis可以通过几个简单的步骤来实现。以下是一个基本的步骤指南&#xff1a; 步骤1&#xff1a;添加依赖 首先&#xff0c;你需要在你的pom.xml文件中添加MyBatis和数据库的依赖。例如&#xff0c;如果你使用MySQL数据库&#xff0c;你可以添加以下依赖&…

服务器防入侵的方案浅析

随着物联网技术和互联网技术的日益发展&#xff0c;勒索病毒、工控安全、产线作业都面领着极大的威胁。智慧互联正在成为各个行业未来的发展方向&#xff0c;智慧互联包括物联网、万物互联&#xff0c;机器与机器&#xff0c;工业控制体系&#xff0c;信息化&#xff0c;也就是…

Landsat8-9 C2L2使用注意点(简略版)

Landsat8-9 C2L2使用注意点&#xff08;简略版&#xff09; 像元值转化 表面反射率产品时和表面温度时&#xff0c;即对应的SR和ST波段的遥感数据时&#xff0c;需要进行像元值的转换&#xff0c;其转换公式与Collection1不一样&#xff08;Collection1已经弃用了&#xff0c…

SQL中NULL值比较问题解析与解决方法

在进行 SQL 查询时&#xff0c;经常会遇到处理 NULL 值的情况。然而&#xff0c;在使用 ! 或 <> 来比较 NULL 值时&#xff0c;可能会遇到一些意想不到的问题。本篇博客将介绍在 SQL 中处理 NULL 值比较的问题&#xff0c;并提供解决方法。 问题描述 假设我们有一张名为…

每日新闻掌握【2024年4月22日 星期一】

2024年4月22日 星期一 农历三月十四 大公司/大事件 央视发文谈调休&#xff1a;原则是最小干预 “五一其实只放一天”近日冲上热搜&#xff0c;再度引发“假期该不该调休”的热议。如何调休&#xff0c;也有讲究。一个基本原则是&#xff0c;“最小干预&#xff0c;尽量不打乱…

SharpDevelop插件系统代码阅读笔记

SharpDevelop插件系统代码阅读笔记 1.插件系统实现细节 /// <summary> ///AddIn.cs 通过在插件dll里面查找类名&#xff0c;再创建对象&#xff0c;这个功能MEF已经可以实现了 /// </summary> /// <param name"className"></param> /// <…

FLStudio怎么冻结轨道以及如何批量复制音符

FLStudio是一款功能强大的音乐制作软件&#xff0c;广泛用于音乐制作和打谱当中。我们在制作音乐时&#xff0c;经常会遇到处理大量音频轨道的情况&#xff0c;过多的音频轨道可能会导致电脑性能受限&#xff0c;从而影响工作流程。为了应对这个问题&#xff0c;FLStudio提供了…

【JavaEE多线程】Java 文件操作

目录 Java中操作文件File概述属性构造方法方法 文件内容的读写——文件流 streamInputStreamFileInputStream概述利用 Scanner 进行字符读取OutputStream 概述 练习 Java中操作文件 Java 中通过 java.io.File类来对一个文件&#xff08;包括目录&#xff09;进行抽象的描述。注…

Ruby中Rack中间件的作用是什么?如何应用?

在 Ruby 中&#xff0c;Rack 是一个 Web 服务器接口&#xff0c;它允许开发者使用统一的方式构建 Web 应用程序。Rack 中间件是 Rack 框架的一个核心概念&#xff0c;它可以在请求被传递给应用程序之前或之后对请求和响应进行处理。 Rack 中间件的作用包括但不限于&#xff1a…

IPv6改造:反向代理技术的原理和优缺点分析

在前面几篇文章中&#xff0c;我们介绍了目前行业中三种比较常见的IPv6改造技术&#xff0c;分别是隧道技术、双栈技术和翻译技术&#xff0c;这三种改造方式采用不同的技术方案实现了IPv4向IPv6网络的过渡&#xff0c;然而每种改造技术在改造周期和成本、业务连续性、协议兼容…

实景景区亲自儿童剧本杀小程序开发搭建

实景景区亲自儿童剧本杀小程序开发搭建需要涉及多个方面的内容&#xff0c;包括系统架构设计、功能模块设计、页面设计、开发工具选择等。 系统架构设计需要确定小程序的开发框架&#xff0c;可以使用小程序开发框架来构建前端页面和后端接口&#xff0c;同时需要考虑数据库设…

ctfshow web入门 SQl注入 web185--web190

web185 这道题还有另外一个脚本就是用concat的拼接达到有数字的目的 concat(truetrue) 2 concat(true) 1 concat(true, true) 11 然后上脚本&#xff08;Y4tacker这个师傅的&#xff09; # Author:Y4tacker import requestsurl "http://341e93e1-a1e7-446a-b7fc-75beb…

目标检测——行人交通信号灯数据集

一、重要性及意义 行人交通信号灯检测的重要性及意义主要体现在以下几个方面&#xff1a; 首先&#xff0c;行人交通信号灯检测对于提高道路安全性至关重要。通过准确识别交通信号灯的状态&#xff0c;行人可以更加清晰地了解何时可以安全地过马路&#xff0c;从而避免与车辆…

node.js版本降级/升级

第一步.先清空本地安装的node.js版本 按健winR弹出窗口&#xff0c;键盘输入cmd,然后敲回车&#xff08;或者鼠标直接点击电脑桌面最左下角的win窗口图标弹出&#xff0c;输入cmd再点击回车键&#xff09; 进入命令控制行窗口&#xff0c;输入where node&#xff0c;查看本地…

Android Studio历史版本下载地址

https://developer.android.com/studio/archive?hlzh-cn https://blog.csdn.net/crasowas/article/details/130304836

STM32F4使用FPU/DSP核心启用与测试

STEP1、下载DSP库 具体链接如下&#xff1a; https://www.st.com/en/embedded-software/stsw-stm32065.html?dl9w6sdOSAKySFxBhN764Stg%3D%3D%2CIS1vzyA84KLAefK%2B0DawUl0FScREpiT6AdC3qFjIMJnCIgXIwr82G2XUFo6w43Wp5L5CUyrX3vZAoaHRE3nsTmRsArV3hnQOEgX73SKt8ss1vGrLlfXT24j…