#hash-set #insertion-order #linked-list

linked_hash_set

具有插入顺序的HashSet

5个版本

0.1.4 2020年7月21日
0.1.3 2018年6月7日
0.1.2 2018年2月24日
0.1.1 2017年12月4日
0.1.0 2017年10月25日

#66 in 数据结构

Download history 112874/week @ 2023-11-21 130758/week @ 2023-11-28 115642/week @ 2023-12-05 106927/week @ 2023-12-12 103997/week @ 2023-12-19 43056/week @ 2023-12-26 98716/week @ 2024-01-02 106412/week @ 2024-01-09 113329/week @ 2024-01-16 113593/week @ 2024-01-23 107636/week @ 2024-01-30 114023/week @ 2024-02-06 107900/week @ 2024-02-13 114748/week @ 2024-02-20 112322/week @ 2024-02-27 70958/week @ 2024-03-05

425,695 每月下载量
298 个crate中使用 (28 直接)

Apache-2.0

59KB
919

linked_hash_set crates.io 文档

此库提供了一个具有可预测迭代顺序的哈希集,该顺序基于元素的插入顺序。它被实现为一个linked_hash_map::LinkedHashMap,其中值是空的,类似于标准库中从HashMap实现HashSet的方式。

与std HashSet的比较

一般用法与传统哈希集非常相似,但此结构还维护了插入顺序

HashSet相比,LinkedHashSet使用一个额外的双向链表贯穿其条目。因此提供了方法 front()pop_front()back()pop_back()refresh()

IndexSet的比较

indexmap::IndexSet相比,虽然两者都维护插入顺序,但LinkedHashSet使用链表允许高效地删除而不影响剩余元素顺序。然而,当这种区别不重要时,indexmap应该是更快的选项。

示例

let mut set = linked_hash_set::LinkedHashSet::new();
assert!(set.insert(234));
assert!(set.insert(123));
assert!(set.insert(345));
assert!(!set.insert(123)); // Also see `insert_if_absent` which won't change order

assert_eq!(set.into_iter().collect::<Vec<_>>(), vec![234, 345, 123]);

最低支持的rust编译器

此crate使用最新稳定版本的rust进行维护。

依赖

~235KB