实现无序的三元组

时间:2014-09-30 12:22:19

标签: c++ floating-point std unordered-set

我有两个3D数据集。这些集合中的每个元素都是(float,float,float)类型的三元组。这些数据集包含一些重复的元素。我希望以这种方式合并这两个数据集,以便生成的集合没有任何重复的元素。

一种天真的方法是简单地维护一个std::vector列表来存储这些三元组,只有当列表中不存在任何新的三元组时才应插入它们(使用简单的floating-point equality comparison进行检查)< / p>

为了减少插入时间,另一种方法可以是在查询当前树中的三元组之后将三元组存储在kd树中,以避免重复。

问题:

我想知道是否还有其他方法有效实现浮点三元组元素的无序集合?

1 个答案:

答案 0 :(得分:0)

怎么样:

std::unordered_set<tuple<float, float, float>> Triplets;

X,Y,Z坐标在这里并不重要 - 但它们可能对您很重要,因此您可以对齐它们(逻辑上,在tuple中)。 float对象中的tuple可能不适合您,您可以制作更简单的结构来保存它们,并实施operator ==和/或operator<

KD-tree在STL用语IMO中并不适合。你需要一个&#34;搜索&#34;搜索3D球体中特定点的算法 - STL类不是一个很好的选择(除了保存数据)。