我是 C++ 的新手,我没有什么问题。我有向量,在那个向量中是有 3 个整数的向量。
内向量代表一个人。内部向量中的 3 个整数表示距起点的距离、速度和原始索引(因为在输入整数中未排序并且在输出中我需要打印原始索引而不是此排序向量中的索引)。
现在我已经给出了一些代表从开始的距离的点,我需要找到哪个人会在那个点上排在第一位所以我一直在想我的第一步是我会找到最接近给定点的人所以基本上我需要找到 lower_bound/upper_bound.
如果我想找到内部向量中第一项的 lower_bound,我该如何使用 lower_bound?或者我应该使用结构/类而不是内部向量?
您将使用带有自定义比较器的
std::lower_bound
版本(链接中标记为“(2)”的版本);你会写一个向量比较器,它通过第一个项目(或你喜欢的任何其他方式)来比较向量。
但是:
std::lower_bound
不会将向量相互比较,而是将它们与给定值(无论是向量还是标量)进行比较。所以你可能真的想做点别的事情。std::vector
中保留固定长度的元素序列通常不是一个好主意。你有没有考虑过std::array
?我不确定你内心的东西应该是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]));
lower_bound(v.begin(),v.end(),vector<element_ty>{x0,x1,..,xn-1})