【发布时间】:2015-03-16 10:49:02
【问题描述】:
我需要将如下值存储在数据结构中,
id x y z
0 0.1 0.1 0.1
1 0.2 0.1 0.6
2 0.01 0.3 0.1
.....
现在我需要匹配 x,y,z 双精度值并获取对应的 id(int) 值。我可能需要存储大约 400000 个值。我应该使用什么样的数据结构来进行有效的搜索? C++ 是否带有任何支持我的要求的内置结构。
【问题讨论】:
-
构建一个包含
x、y和z值的struct(比如foo)以及必要的谓词,然后使用std::map<foo, int>;假设您的id可以表示为int。搜索将是 O(log N)。您唯一需要解决的是浮点比较,但这取决于x、y和z的候选值是如何出现的。 -
您如何测试
doubles 的相等性?如果您使用operator==与abs(x-y) < threshold之类的东西或其他东西,可能的答案会大不相同。 -
这可能取决于您想要的性能。你关心插入时间还是只关心搜索?
-
您可能正在寻找k-d tree,如果您想要查询的“最近点”(而不仅仅是查询本身,以防您不知道您在寻找什么,但需要最近的邻居)
-
搜索会更重要,因为我只会插入一次但经常搜索。由于双值,我可能不得不使用 abs。
标签: c++ performance algorithm data-structures