对曲线向量中的元素进行排序



我有一个类点,它表示x和y坐标和类曲线有两个点,起点和终点。

class point {
public:
    double x{0.0}, y{0.0};
    //.........
}
class curve {
public:
    point start, end;
    //.........
}

我有一个曲线向量,需要排序。一条曲线的起点等于另一条曲线的终点。输出曲线(保持一条曲线接一条)可以是开曲线或闭曲线(始终是连续曲线)。

具有大量循环和 2/3 向量的当前逻辑。有没有办法使用标准算法(c ++ 11)实现相同的方法。

假设向量的第一个元素是路径的起点,并且只有一个解决方案,以下行将完成这项工作:

bool operator!=(point& a,point& b) {
    return !(a.x == b.x && b.y == a.y);
}
bool operator==(point& a, point& b) {
    return (a.x == b.x && b.y == a.y);
}
void order(std::vector<curve>& vin) {
    auto it = vin.begin();
    auto end = vin.end();
    while (it+1 != end) {
        if (it->end != (it + 1)->start) {
            std::swap(*(it + 1), *std::find_if(it + 2, end, [it](curve& c){ return c.start == it->end ;  }));
        }
        ++it ;
    }
}

如果需要查找第一个元素,只需定义一个谓词is_the_beginning并在循环之前执行类似的调用 swap:

bool is_the_beginning(curve& c) {
    if ( ... )  return true;
    else return false ;
}
std::swap(*it, *std::find_if(it+1, end, is_the_beginning ) ) ;

也许您需要考虑操作员double的精度 ==!= .您也可以通过函数替换它们

相关内容

  • 没有找到相关文章

最新更新