我有一个向量存储沿某条线到某个参考点的距离。所以,我想要例如距离为700米的索引或距该距离最近的值。
我假设矢量已经排序,并且成功地使用了lower_bound。
问题在于,在现实生活中,错误发生,所以我无法保证我将始终拥有一个有序的向量,因为在存储数据时,用户可能没有按照该行进行操作。
如果未对数据进行排序,如何找到最接近的值?
答案 0 :(得分:3)
你不能,因为std::vector
是一个序列容器。您必须使用排序算法 sort 数据。
答案 1 :(得分:2)
您可以在其三参数形式中使用std::min_element
。如果第一个参数比第二个参数更接近目标距离(700m),则传递一个返回true
的比较器。然后从min_element
返回的结果将是到目标的最近点。
当然这比lower_bound
渐近地慢,但它比分类矢量的最坏情况渐近地快。如果您可以对矢量进行一次排序,然后在搜索多个不同距离的最近点时依赖它来保持排序,则应该使用std::sort
和std::lower_bound
。如果找到最接近的点是一次性操作,那么最好做到这一点" slow"使用min_element
的方式。
答案 2 :(得分:1)
将您的vector
复制到stl set
中,然后使用与向量相同的逻辑来查找元素。