如何从 rbtree-rs 插入或更新 RBTree?
How do I insert into or update an RBTree from rbtree-rs?
如果值是数据结构的一部分(在本例中为红黑树),我无法理解如何以惯用方式查找和追加或创建新向量。
我正在使用 this Red Black Tree implementation 并且计划获取对值的可变引用,如果它存在(不是 None
)我将附加到该值并创建一个新向量并移动它如果键没有值,则为 RBTree
。我的代码看起来像这样,为简洁起见稍作改动,请原谅任何粗心的错误:
struct Obj {
tree: RBTree<i32, Vec<String>>,
}
let mut obj = Obj {
tree: RBTree::new(),
};
let k = 5;
let v = "whatever";
match obj.tree.get_mut(k) {
None => {
let mut vec: Vec<Node> = Vec::new();
vec.push(v);
book.tree.insert(k, vec);
}
Some(vec) => vec.push(v),
}
问题是当我检查树是否存在时,我得到了一个对树的可变引用,因为如果它确实存在,我想通过附加到向量来改变它。但是,如果它不存在,我想插入一个尝试进行可变借用的新节点,所以我在这一行 book.tree.insert(k, vec);
.
上得到一个 "second mutable borrow occurs here"
我很想深入了解如何执行此查找或创建,以便它可以编译并且是线程安全的。我猜也可能是我使用的库有问题。还没有资格对此发表评论。
在这种情况下,解决方法是将变异代码移出 get_mut()
的范围。
let needs_insert = match obj.tree.get_mut(k) {
None => true,
Some(vec) => {
vec.push(v);
false
}
};
if needs_insert {
book.tree.insert(k, vec![v]);
}
如果值是数据结构的一部分(在本例中为红黑树),我无法理解如何以惯用方式查找和追加或创建新向量。
我正在使用 this Red Black Tree implementation 并且计划获取对值的可变引用,如果它存在(不是 None
)我将附加到该值并创建一个新向量并移动它如果键没有值,则为 RBTree
。我的代码看起来像这样,为简洁起见稍作改动,请原谅任何粗心的错误:
struct Obj {
tree: RBTree<i32, Vec<String>>,
}
let mut obj = Obj {
tree: RBTree::new(),
};
let k = 5;
let v = "whatever";
match obj.tree.get_mut(k) {
None => {
let mut vec: Vec<Node> = Vec::new();
vec.push(v);
book.tree.insert(k, vec);
}
Some(vec) => vec.push(v),
}
问题是当我检查树是否存在时,我得到了一个对树的可变引用,因为如果它确实存在,我想通过附加到向量来改变它。但是,如果它不存在,我想插入一个尝试进行可变借用的新节点,所以我在这一行 book.tree.insert(k, vec);
.
我很想深入了解如何执行此查找或创建,以便它可以编译并且是线程安全的。我猜也可能是我使用的库有问题。还没有资格对此发表评论。
在这种情况下,解决方法是将变异代码移出 get_mut()
的范围。
let needs_insert = match obj.tree.get_mut(k) {
None => true,
Some(vec) => {
vec.push(v);
false
}
};
if needs_insert {
book.tree.insert(k, vec![v]);
}