如何在向量的向量上使用lower_bound?

问题描述 投票:0回答:3

我是 C++ 的新手,我没有什么问题。我有向量,在那个向量中是有 3 个整数的向量。

内向量代表一个人。内部向量中的 3 个整数表示距起点的距离、速度和原始索引(因为在输入整数中未排序并且在输出中我需要打印原始索引而不是此排序向量中的索引)。

现在我已经给出了一些代表从开始的距离的点,我需要找到哪个人会在那个点上排在第一位所以我一直在想我的第一步是我会找到最接近给定点的人所以基本上我需要找到 lower_bound/upper_bound.

如果我想找到内部向量中第一项的 lower_bound,我该如何使用 lower_bound?或者我应该使用结构/类而不是内部向量?

c++ c++11 vector comparison c++-standard-library
3个回答
3
投票

您将使用带有自定义比较器

std::lower_bound版本(链接中标记为“(2)”的版本);你会写一个向量比较器,它通过第一个项目(或你喜欢的任何其他方式)来比较向量。

但是:

  • 正如@doctorlove 指出的那样,
    std::lower_bound
    不会将向量相互比较,而是将它们与给定值(无论是向量还是标量)进行比较。所以你可能真的想做点别的事情。
  • std::vector
    中保留固定长度的元素序列通常不是一个好主意。你有没有考虑过
    std::array
  • 您的“具有 3 个整数的向量”很可能实际上代表其他东西,例如3维几何空间中的点;在这种情况下,是的,他们应该属于某种类别。

1
投票

我不确定你内心的东西应该是3个元素的

std::vector
-s。 我相信他们应该 std::array-s 的 3 个元素(因为你 know 大小是 3 并且不会改变)。

所以你可能想要

 typedef std::array<double,3> element_ty;

然后使用

std::vector<element_ty>
,剩下的(您的
lower_bound
点)就像 einpoklum 的回答一样

顺便说一句,您可能想使用 std::min_element 进行显式比较。

也许你想要这样的东西:

std::vector<element_ty> vec;
auto minit = 
    std::min_element(vec.begin(), vec.end(),
                     [](const element_ty& x, const element_ty&y) {
                        return x[0] < y[0])); 

-1
投票
lower_bound(v.begin(),v.end(),vector<element_ty>{x0,x1,..,xn-1})
© www.soinside.com 2019 - 2024. All rights reserved.