6个稳定版本
使用旧的Rust 2015
1.0.5 | 2018年1月2日 |
---|---|
1.0.4 | 2017年12月15日 |
1.0.3 | 2017年12月13日 |
1.0.2 | 2017年12月12日 |
#2424 in 数据结构
用于 2 个crate(通过 rustupolis)
25KB
440 行
indextree-ng
具有多线程支持的竞技场树结构
这是 indextree
crate 的分支,允许删除节点。原始版本不能删除节点,因为最初的想法是在底层内存竞技场的生命周期结束时同时丢弃所有节点。
竞技场树结构使用单个 Vec
、一个 HashMap
和数值标识符。每个节点都有一个id,该id通过 HashMap
映射到向量的索引。这允许在竞技场哈希的生命周期结束之前删除单个节点。
没有 RefCell
,并且通过竞技场的唯一 (&mut) 访问以更符合Rust的风格处理可变性。
示例用法
use indextree_ng::Arena;
// Create a new arena
let arena = &mut Arena::new();
// Add some new nodes to the arena
let a = arena.new_node(1);
let b = arena.new_node(2);
// Append b to a
a.append(b, arena);
assert_eq!(b.ancestors(arena).into_iter().count(), 2);
//Access a node
assert_eq!(arena[b], 2);
// Remove a node
arena.remove_node(a);
assert_eq!(b.ancestors(arena).into_iter().count(), 1);