使用二进制搜索树存储多维矢量

问题描述 投票:1回答:1

我有一个vector-3值的数组:

 struct Vector3 {
    int x, y, z;
    ...
 };

我想将这些值放入二进制搜索树中,以便快速搜索并查找重复项。在二叉搜索树中,我们需要比较值以正确的顺序设置它们。但是有没有办法比较有意义的向量?

我曾考虑过按长度进行比较,但这将无法正确找到重复项,因为两个向量可以指向不同的方向,但长度相同。

比较每个元素也没有意义,因为它会根据您比较两个向量的顺序给出不同的比较结果。

那么将二进制搜索树用于多维矢量有意义吗?还是应该查看哈希表?

编辑:建议的答案实现两个二维矢量(点)之间的比较,例如(x < pt.x) || ((!(pt.x < x)) && (y < pt.y));。但是没有关于这种比较如何/为什么起作用的解释。

c++ binary-search-tree
1个回答
0
投票

[当处理表演作品时,我确实像约翰·卡马克(John Carmack)在《厄运大师》中一样。首先做最简单的事情。您可以从具有排序函数的二叉树开始,该函数按x,y和z进行排序。我会测量一下,如果这还不够快,则取决于您的X,Y和Z范围,我可能会尝试使用哈希映射(可能会根据X,Y和Z的可能范围使用位移位进行哈希处理),或者考虑将它们存储在八叉树中。

© www.soinside.com 2019 - 2024. All rights reserved.