9、Rust 数据结构与迭代器:深入解析与应用

Rust 数据结构与迭代器:深入解析与应用

1. 集合与映射的必要性

在处理数据时,我们常常需要根据键快速查找相同的值,或者具备极快的查找能力。在 Vec<T> 中,元素的索引可视为存储元素(值)的键,但存在一个重大差异:插入元素时索引会发生变化。因此,集合和映射需要额外的数据结构来按设计工作并实现预期的速度。

在 Rust 标准库的 std::collections 模块中,有两种实现: BTreeSet BTreeMap ,以及 HashMap HashSet

2. 键的排序:树与哈希

2.1 树结构

遍历集合并逐个比较元素来查找目标元素会耗费时间,对于大数据集,线性搜索(时间复杂度为 $O(n)$)效率低下。一种解决方案是对集合进行排序,然后利用新的顺序推导目标元素最可能的位置,这一概念可抽象为树结构。

以平衡二叉树为例,其中位数元素作为根节点,有两个子节点,一个值小于父节点,另一个值大于父节点。每个子节点又遵循相同规则,形成类似树的结构。这种数据结构能在不查看大部分元素的情况下遍历所有项,搜索单个元素的时间复杂度为 $O(log(n))$,非常适合通过标识符检索元素。在 Rust 中, BTreeSet BTreeMap 使用 B - 树数据结构。

2.2 哈希

当键不可排序,或者仅使用单个值不可行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值