gpt4 book ai didi

rust - 有效地获取Vec > from Ref<' a,BTreeSet >

转载 作者:行者123 更新时间:2023-12-03 11:44:21 24 4
gpt4 key购买 nike

我有一个Ref<'a, BTreeSet<T>>,我想获取其内容的引用作为Vec<Ref<'a, T>>
一种方法是:

fn get_refs<'a, T: Ord>(btree: Ref<'a, BTreeSet<T>>) -> Vec<Ref<'a, T>> {
let mut result = Vec::new();
for e in btree.iter() {
result.push(Ref::map(Ref::clone(&btree), |t| t.get(&e).unwrap()))
}
result
}
A running example
现在让 nbtree的大小。
因为从二叉树获取值需要 O(log(n)),并且由于要遍历二叉树需要 O(n),所以此方法的时间复杂度为 O(n log(n))
即使使用 &'a BTreeSet<T>&'a T代替 Ref<'a, BTreeSet<T>>Ref<'a, T>进行操作,也需要 O(n)(因为我们只需要收集在数组中迭代的引用)。下面是使用普通引用的方法的示例。
fn get_refs<'a, T: Ord>(btree: &'a BTreeSet<T>) -> Vec<&'a T> {
btree.iter().collect()
}
A running example
我的问题是:
给定 Ref<'a, BTreeSet<T>>,有没有办法获得 Vec<Ref<'a, T>>时间复杂度的 O(n)

最佳答案

最简单的方法是引用Ref而不是Ref:

fn get_refs<'a, T>(btree: &'a Ref<BTreeSet<T>>) -> Vec<&'a T> {
btree.iter().collect()
}
Playground link
这样, Ref的生命周期可以比函数的生命周期更长,这意味着您可以返回借用 Ref的引用,而无需处理借用临时项的情况。
请注意,这意味着您可以只使用 &'a BTreeSet<T>而不必使用 Ref,因此您可以使用 original code with references works

关于rust - 有效地获取Vec <Ref <'a, T>> from Ref<' a,BTreeSet <T >>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64930804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com