换句话说,我们可以在持久数据结构中有效地模拟多对多关系吗?是否有双向multimap持久数据结构?
建议使用一对单向multimaps。但是,我不确定这对于在持久数据结构中删除将如何工作。我们来看一下情况:我们将键1..4设为值“1”,“4”,并且假设它们各自指的是所有其他键,所以我们有两张在两个方向上看起来非常相似的地图:
{1 => [“2”,“3”,“4”],2 => [“1”,“3”,“4”],...} {“1”=> [2,3 ,4],“2”=> [1,3,4],...}
现在我们想要从系统中完全删除项目1。这需要更改第一个映射中的一个节点,但它需要在第二个映射中更改n-1个节点。对于数千人中的n(这可能是我正在考虑的情况)不会很贵吗?或者是为处理这种类型的更改而优化的multimap?这是一个病态的情况,但仍然...
Quadtrees似乎是一个迷人的想法。我会给予更多的思考。
我很好奇,我想引用令人兴奋的数据结构,即使不是英文。 – mentics 2011-04-18 06:16:51
@taotree>我只是为它添加了一些代码。你怎么看? – gasche 2011-04-18 12:48:29
有趣的是,虽然我注意到没有删除功能,这是我看到有这种类型的事情的挑战。此外,它看起来键和值必须是不同的类型,或者至少他们不能有两个相同的值。 – mentics 2011-04-18 17:24:11