如何在向量向量上使用lower_bound?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在向量向量上使用lower_bound?相关的知识,希望对你有一定的参考价值。
我是C ++的新手,我没有什么问题。我有向量,在该向量中是具有3个整数的向量。
内部矢量代表一个人。内部向量内部的3个整数表示距起点,速度和原始索引的距离(因为在输入整数中没有排序,在输出中我需要在此有序向量中打印原始索引而不是索引)。
现在我已经给出了一些代表起点距离的点,我需要找到那个人在那一点上的第一个,所以我一直在想我的第一步是找到最接近给定点的人,所以基本上我需要找到LOWER_BOUND / UPPER_BOUND。
如果我想在内部向量中找到第一项的lower_bound,我该如何使用lower_bound?或者我应该使用struct / class而不是内部向量?
您将使用std::lower_bound
which takes a custom comparator的版本(链接上标记为“(2)”的版本);你会写一个矢量比较器,用它们的第一个项目(或你喜欢的任何其他方式)比较矢量。
然而:
- 正如@doctorlove指出的那样,
std::lower_bound
不会将矢量相互比较,而是将它们与给定值(无论是向量还是标量)进行比较。所以你可能真的想做别的事情。 - 在
std::vector
中保持固定长度的元素序列通常不是一个好主意。你考虑过std::array
吗? - 您的“具有3个整数的向量”很可能实际上代表其他东西,例如三维几何空间中的点;在这种情况下,是的,他们应该在某种类别。
我不确定你的内心事物应该是3个元素的std::vector
-s。我相信他们应该std::array-s的3个元素(因为你知道大小是3并且不会改变)。
所以你可能想拥有
typedef std::array<double,3> element_ty;
然后使用std::vector<element_ty>
,其余的(你的lower_bound
点)在einpoklum's answer中做。
顺便说一句,您可能希望使用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?的主要内容,如果未能解决你的问题,请参考以下文章
Lower_bound 不适用于具有 3 个元素的向量的最后一个元素