作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个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
n
为
btree
的大小。
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/
我是一名优秀的程序员,十分优秀!