3 个稳定版本
使用旧的 Rust 2015
1.0.2 | 2017 年 5 月 7 日 |
---|---|
1.0.1 | 2017 年 2 月 20 日 |
1.0.0 | 2016 年 9 月 9 日 |
#1274 在 数据结构 中
每月 23 次下载
38KB
731 行
概述
这个软件包提供了一种将任意类型 T
的值与另一个任意类型 S
的值(“符号”)关联起来的方法。典型用例涉及不如 S
类型值方便处理的 T
类型值,其中 T
的身份很重要,但其值不重要。例如,许多自然语言处理流程的第一步是构建从标记字符串到从 0 开始的密集整数范围的映射,以便它们可以非常快速地进行比较,并用于索引简单的数据结构,如向量或数组。
您可以通过以下结构获得这个包的大部分功能
pub struct Table<T> where T: Hash + Eq {
// Mapping from T to usize.
by_symbol: HashMap<T, usize>,
// Mapping from usize to T.
by_id: Vec<T>,
}
但是,这样您就维护了每个 T
的两个副本。您可以求助于一个 HashMap<Rc<T>, usize>
和 Vec<Rc<T>>
,但这会使您不得不付出引用计数的代价,并且难以在线程之间共享。使用 Arc
而不是 Rc
使您的类型 Send
化,但这比使用 Rc
的开销更大。
或者,您可以使用 symbol_table::HashIndexing<Data=T, SymbolId=usize>
并获取一个类型,当 T
是 Send
和 Sync
时,它是 Send
和 Sync
,并且每个关联中只拥有一个 T
。
有关示例用法和更多技术细节,请参阅 rustdoc。
版权
版权所有 2016,Donald S. Black。
本文件受Apache许可证2.0版(以下简称“许可证”)许可;除非遵守许可证,否则不得使用此文件。您可以在以下链接获取许可证副本:https://apache.ac.cn/licenses/LICENSE_2.0。
除非适用法律要求或书面同意,否则根据许可证发布的软件按“原样”提供,不提供任何形式的保证或条件,无论是明示的还是默示的。有关许可证管理权限和限制的具体语言,请参阅许可证。