#hash-map #hash-set #double-key #two-key

双键哈希表

具有双键到单数据/值的 HashMap

12 个重大版本

0.14.0 2022 年 4 月 27 日
0.11.0 2022 年 4 月 22 日
0.1.1 2022 年 3 月 29 日

#1950数据结构

每月 37 次下载

Apache-2.0

170KB
1.5K SLoC

双键哈希表

Crates.io Documentation Rust

类似于 HashMap,但允许您使用两个不同的键指向相同的数据。

在开发过程中,有时可能需要具有类似于 HashMap 的数据结构,但具有两个不同的键引用相同的数据。

例如,如果您有一些具有唯一 ID 和名称的数据,那么您创建一个包含名称的结构,并使用唯一 ID 作为键将其存储在 普通 HashMap 中。但是,通过名称查找元素将执行 O(n) 时间的操作。反向情况也是如此。

此软件包试图通过提供 DHashMap 结构来解决这一矛盾 - 一个您可以添加、查找和删除元素的结构,这些元素可以使用类型为 K1 的第一个键或类型为 K2 的第二个键。

内部,它使用两个映射:第一个是类型为 HashMap<K1, (K2, V)> 的映射,第二个是类型为 HashMap<K2, K1> 的映射。使用两个 HashMap 而不是一个会带来性能和内存开销。

建议使用类型为 K1 的第一个键以快速访问数据,因为使用类型为 K2 的第二个键进行索引需要两个 HashMap 查找。

变更日志

当前状态

双键哈希表处于积极开发中。设计目标是实现整个 HashMap 接口。有关更多信息,请参阅 变更日志

方法

  • new:自 v0.1.0 以来完成
  • with_capacity:自 v0.1.0 以来完成
  • with_hasher:自 v0.1.0 完成以来
  • with_capacity_and_hasher:自 v0.1.0 完成以来
  • capacity:自 v0.1.0 完成以来
  • keys:自 v0.6.0 完成以来
  • into_keys:自 v0.12.0 完成以来
  • values:自 v0.6.0 完成以来
  • values_mut:自 v0.6.0 完成以来
  • into_values:自 v0.12.0 完成以来
  • iter:自 v0.4.0 完成以来
  • iter_mut:自 v0.5.0 完成以来
  • len:自 v0.1.0 完成以来
  • is_empty:自 v0.1.0 完成以来
  • drain:自 v0.10.0 完成以来
  • drain_filter:开发中
  • retain:开发中
  • clear:自 v0.1.0 完成以来
  • hasher:自 v0.1.0 完成以来
  • reserve:自 v0.1.0 完成以来
  • try_reserve:自 v0.1.0 完成以来
  • shrink_to_fit:自 v0.1.0 完成以来
  • shrink_to:自 v0.1.0 完成以来
  • entry:自 v0.1.0 完成以来
  • get:自 v0.1.0v0.8.0get_key1get_key2get_keys 方法)以来
  • get_key_value:自 v0.8.0get_key1_valueget_key2_valueget_keys_value 方法)以来
  • contains_key: 已完成自 v0.7.0 (contains_key1contains_key2contains_keys 方法)
  • get_mut: 已完成自 v0.1.0 (get_mut_key1get_mut_key2 方法)
  • insert: 已完成自 v0.1.0 (insert_uncheckedinsert 方法)
  • try_insert: 已完成自 v0.1.0
  • remove: 已完成自 v0.1.0 (remove_key1remove_key2 方法)
  • remove_entry: 开发中
  • raw_entry_mut: 开发中
  • raw_entry: 开发中

特质实现

  • Clone: 已完成自 v0.1.0
  • Debug: 已完成自 v0.9.0
  • Default: 已完成自 v0.3.0
  • Extend: 已完成自 v0.2.0 (版本 v0.12.0 的一些更新)
  • From: 已完成自 v0.14.0
  • FromIterator: 已完成自 v0.2.0
  • Index: 已完成自 v0.14.0
  • IntoIterator: 已完成自 v0.11.0
  • PartialEq: 已完成自 v0.9.0
  • Eq: 已完成自 v0.11.0

许可证

在您明确表示不同的情况下,除非您明确表示,否则任何有意提交以包含在作品中的贡献,根据 Apache-2.0 许可证定义,应按上述方式许可,不附加任何额外条款或条件。

贡献

除非您明确表示,否则任何贡献均应按上述方式许可,不附加任何额外条款或条件。

无运行时依赖