获取向量元素的第 n 个最小值

维德斯特

我有一个 std 向量,其中每个元素描述 3D 空间中的一个点。因此每个点都有 X、Y 和 Z 坐标。现在的任务是遍历所有点,而不是找到与参考点距离最小的点,而是找到第二个或第三个最小距离的点。然后返回这个距离
我的问题是找到第 n 个最小距离的灵活实现。下面的代码用于一维空间,其中每个点都具有相同的位置以简化示例。

std::vector<double> point(10, 1.0);
double min_distance = 0.0;

for (int i = 0; i < point.size(); ++i)
{
  for (int j = 0; j < point.size(); ++j)
  {
    if (i == j)
      continue;

    min_distance = std::min(min_distance, std::abs(point[j] - point[i]));
  }
}
托马斯·凯萨德

您可以使用该std::nth_element函数根据您的谓词对数组进行部分排序:

std::vector<double> points;
std::nth_element(points.begin(), points.begin() + n, points.end());

n你的第 n 个元素在哪里如果您想获取所有劣于std::sort您的数组的元素并选择正确的元素

的优点std::nth_element是,它可以是直链中的元素的数目,而std::sort是在O(nlogn)最坏的情况。

请注意,如果您使用std::nth_element,您的数组将不会被排序,但您只能保证您的第 n 个元素位于 position n

编辑:使用自定义距离更新示例

Point reference;
std::vector<Point> points;
std::nth_element(points.begin(), points.begin() + n, points.end(),
    [&reference](const Point& a, const Point& b) { return dist(reference, a) < dist(reference, b); });

或者您可以将比较器包装在一个结构中:

struct PointComp
{
  Point reference;
  bool operator<(const Point& a, const Point& b)
  {
    return dist(reference, a) < dist(reference, b);
  }

};

PointComp comp; comp.reference = reference;
std::vector<Point> points;
std::nth_element(points.begin(), points.begin() + n, points.end(), comp);

如果您出于某种原因不喜欢 lambda。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Simulink 中动态获取向量的第 n 个元素

提取向量的第n个元素

MATLAB-获取向量中的每N个元素

在R中,从每组n个元素的向量中获取最小值

如何获取向量的第 i 个元素

如何找到向量中n个最小值的索引?

如何在熊猫的DataFrame的列中提取第n个最大值/最小值?

R中data.frame中每列的第N个最小值

向量化获取每个第n个元素(但第n个元素是可变的)

使用small函数获取列表中N个最小值的行号

如何获取对应于python中列的n个最小值的datetime索引

在 Python 中获取数据帧子集的 n 个最小值

BigQuery:在窗口中选择第n个最小值,由另一个值排序

C ++如何在n个元素的一维数组中查找最小值和最大值?

如何使用sed,sort和tail在文件的第n个间隔中查找列的最小值?

获取最后 n 行中列的最小值

从第n个元素开始迭代向量

一种获取向量的局部最小值和最大值的方法

获取整个列的data.frame列内的向量的第n个元素-R

在R中向量的第n个元素之后加上值

如何找到大小为k的所有子数组的第n个最小值/最大值(滑动窗口问题)

SQL 从 3 个值的计算中获取最小值

获取最小值

MySQL 显示每个团队的第 4 个最小值

如何获取列表中每个项目的第n个元素,该元素本身是未知长度的向量

获取矩阵中的前四个最小值

获取向量的最后一个元素并将其推到相同的向量

Clojure:如何在另一个向量中获取向量的元素

R:如何获取每n行的最小值和最大值或其他函数