Data structures 允许可变密钥的基于密钥的数据结构?

Data structures 允许可变密钥的基于密钥的数据结构?,data-structures,language-agnostic,Data Structures,Language Agnostic,有人知道允许可变密钥的基于密钥的数据结构的实现或论文吗 由于密钥正在发生变异,我不确定“密钥”是否是正确的术语,但我希望您理解我的意思 我希望这样做的具体原因是,能够尽可能高效地查找更改对象的邻居,而无需不断地对并行列表排序,不断地重新构造树或类似结构,当然,也不需要在哈希映射的键发生变化时处理哈希映射的完全崩溃 一个快速、非常简单的用法示例是(Java HashMap语法): MutableKeyMap m=new MutableKeyMap(); 点p=新点(5,6) m、 put(p,“f

有人知道允许可变密钥的基于密钥的数据结构的实现或论文吗

由于密钥正在发生变异,我不确定“密钥”是否是正确的术语,但我希望您理解我的意思

我希望这样做的具体原因是,能够尽可能高效地查找更改对象的邻居,而无需不断地对并行列表排序,不断地重新构造树或类似结构,当然,也不需要在哈希映射的键发生变化时处理哈希映射的完全崩溃

一个快速、非常简单的用法示例是(Java HashMap语法):

MutableKeyMap m=new MutableKeyMap();
点p=新点(5,6)
m、 put(p,“foo”);
点o=新点(6,6);
m、 付诸表决(o,“酒吧”);
//这些点目前是相邻的,所以
m、 获取(新点(o.x-1,o.y));//返回“foo”。
m、 获取(新点(p.x+1,p.y));//返回“bar”
//现在,大多数数据结构都会在不进行任何修改的情况下崩溃
o、 y+=1;
m、 获取(新点(o.x-1,o.y-1));//仍然返回“foo”,因为映射到的点“foo”没有更改
m、 获取(新点(p.x+1,p.y));//返回null,正如预期的那样,因为o将不再映射到那里
m、 获取(新点(p.x+1,p.y+1));//哈希映射在返回“bar”时也会在此处返回null,
//因为数据结构不能解释密钥的身份变化突变。
m、 得到(o);//甚至在散列映射中返回null。
//因此,我们有效地删除了该条目。在这种数据结构中,我们的想法是在发生变异的情况下保持这种联系。
因此,理想情况下,该数据结构将允许映射提供的优雅(如果可能,还包括速度),用于访问集合中其他元素(相对于另一个元素),同时允许访问元素的那些值发生变化


我意识到这可能需要一个“完美”的数据结构,但我真正感兴趣的是这种类型的数据结构上存在什么,或者人们有什么想法。

您的用例仍然不清楚。你想要实现什么?给出一些操作示例。变异对象是否保留相同的身份?映射是否依赖于两个集合中对象的值?只是猜测,但k-d树就足够了吗@Justin我不这么认为,因为哪些对象在运行时会发生变化,而树会失效。或者,如果你正在改变定义元素在结构中位置的东西,那么我认为你找不到一个可以实现你想要的数据结构。但是如果你把邻居当作前插入的元素,然后插入元素之后,你可能会找到一个。如果你追求的是后者,那么LinkedHashMap可能会起作用。
MutableKeyMap<Point, String> m = new MutableKeyMap<Point, String>();
Point p = new Point(5, 6)
m.put(p, "foo");
Point o = new Point(6, 6);
m.put(o, "bar");
// The points are currently neighbors, so
m.get(new Point(o.x - 1, o.y)); // returns "foo". 
m.get(new Point(p.x + 1, p.y)); // returns "bar"
// Now here is where most data structures fall apart without some reworking
o.y += 1;
m.get(new Point(o.x - 1, o.y - 1)); // Still returns "foo" because the point "foo" is mapped to has not changed
m.get(new Point(p.x + 1, p.y)); // returns null, as to be expected because o would no longer map to there
m.get(new Point(p.x + 1, p.y + 1)); // A hash map would return null here as well when it should return "bar", 
// because the data structure cannot account for the identity-changing mutation of the key. 
m.get(o); // even returns null because of this in a hash map.
// Therefore we have effectively deleted the entry. In this data structure the idea would be to maintain this link despite the mutation.