使用下限查找最近的点...但数据未排序

时间:2012-04-10 08:51:01

标签: c++ vector std

我有一个向量存储沿某条线到某个参考点的距离。所以,我想要例如距离为700米的索引或距该距离最近的值。

我假设矢量已经排序,并且成功地使用了lower_bound。

问题在于,在现实生活中,错误发生,所以我无法保证我将始终拥有一个有序的向量,因为在存储数据时,用户可能没有按照该行进行操作。

如果未对数据进行排序,如何找到最接近的值?

3 个答案:

答案 0 :(得分:3)

你不能,因为std::vector是一个序列容器。您必须使用排序算法 sort 数据。

答案 1 :(得分:2)

您可以在其三参数形式中使用std::min_element。如果第一个参数比第二个参数更接近目标距离(700m),则传递一个返回true的比较器。然后从min_element返回的结果将是到目标的最近点。

当然这比lower_bound渐近地慢,但它比分类矢量的最坏情况渐近地快。如果您可以对矢量进行一次排序,然后在搜索多个不同距离的最近点时依赖它来保持排序,则应该使用std::sortstd::lower_bound。如果找到最接近的点是一次性操作,那么最好做到这一点" slow"使用min_element的方式。

答案 2 :(得分:1)

将您的vector复制到stl set中,然后使用与向量相同的逻辑来查找元素。