Data structures 使两个数据结构保持同步

Data structures 使两个数据结构保持同步,data-structures,rust,Data Structures,Rust,我试图在Rust中实现一个相当特定的数据结构,但在数据元素的生命周期和所有权方面遇到了问题 该结构由两部分组成:一部分是网络控制器,另一部分是网络控制器。两者都需要存储相同的元素集。R树允许我按位置查询元素,Vec维护元素的顺序。元素需要能够被添加和删除 我不知道如何在这里实现所有权。如果Vec拥有这些元素,我如何将它们借用到R树中,直到它们被移除,而不是在Vec的生命周期内?反之亦然 元素具有内部可变状态,所以我不能直接克隆它们 例如: struct MyDataStructure{ rtre

我试图在Rust中实现一个相当特定的数据结构,但在数据元素的生命周期和所有权方面遇到了问题

该结构由两部分组成:一部分是网络控制器,另一部分是网络控制器。两者都需要存储相同的元素集。R树允许我按位置查询元素,Vec维护元素的顺序。元素需要能够被添加和删除

我不知道如何在这里实现所有权。如果Vec拥有这些元素,我如何将它们借用到R树中,直到它们被移除,而不是在Vec的生命周期内?反之亦然

元素具有内部可变状态,所以我不能直接克隆它们

例如:

struct MyDataStructure{
rtree:rtree,
维克:维克,
}
结构RTree{/*…*/}
impl MyDataStructure{
发布fn添加元素(&mut self,元素:元素){
//如何将元素同时添加到RTree和Vec?
}
发布fn删除元素(&mut self,元素:&element){
//我该如何移除它?
}
}
植入树{
发布fn添加元素(&mut self,元素:/*???*/){
}
发布fn删除元素(&mut self,元素:/*???*/){
}
}

有解决这种情况的标准模式吗?

与大多数基于GC的语言相比,Rust值不会自动放在指针后面。因此,一个值只能存在于一个位置,而不能同时存在于两个位置。标准模式是将值放在一个容器中,将引用(或更可能的索引,以避免自引用数据)放在另一个容器中。更通用的替代方法是使用
Rc
智能指针,并将其放在两个位置。如果您知道对象将恰好位于两个位置,那么您可能希望进行研究,但这仍在进行中。另外请注意,如果您仍在学习Rust,那么编写数据结构可能是一项艰巨的任务。我建议你在继续之前先看一看;它可能不会直接帮助您,但它会让您感受到Rust的所有权模型和通用数据结构之间的交互作用。添加到@user4815162342注释:下面是一个如何使用智能指针同步两个变量/数据结构的示例,这来自我刚才问的一个问题。查看评论中的解决方案:感谢链接!我必须对它进行基准测试,但我认为
Rc
对我来说很好。按照@user4815162342所说的,您可以使用
Vec
作为元素的容器,并将引用(将索引到
Vec
)存储在
RTree
中。每当您需要在
RTree
中查找元素的实际值时,只需在
Vec
中查找该索引即可。
Rc
方法虽然效率较低,但更易于编写和理解。