我是C ++的新手,我没有什么问题。我有向量,在该向量中是具有3个整数的向量。
内部向量代表一个人。内部向量内部的3个整数表示距起点,速度和原始索引的距离(因为在输入整数中没有排序,在输出中我需要在此有序向量中打印原始索引而不是索引)。
现在我已经给出了一些代表开始距离的点,我需要找到那个人在那一点上的第一个,所以我一直在想我的第一步就是我会找到最接近给定点的人,所以基本上我需要找到lower_bound / upper_bound。
如果我想在内部向量中找到第一项的lower_bound,我该如何使用lower_bound?或者我应该使用struct / class而不是内部向量?
答案 0 :(得分:3)
您可以使用std::lower_bound
which takes a custom comparator的版本(链接上标有“(2)”的版本);你会写一个矢量比较器,它按照第一个项目(或者你喜欢的其他方式)来比较矢量。
Howerver:
std::lower_bound
不会将矢量相互比较,而是将它们与给定值(无论是向量还是标量)进行比较。所以你可能真的想做别的事。std::vector
中保留固定长度的元素序列通常不是一个好主意。您考虑过std::array
吗?答案 1 :(得分:1)
我不确定你的内心事物应该是std::vector
- 3个元素。
我相信他们应该std::array - 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]));