我有std::set<std::pair<float,float>>
它代表地图上的点(2d,x和y值),我有一个值x1和y1的点。如何按照距离点(x1,y1)的升序排列设置?如何按距离点(x1,y1)的升序对坐标进行排序?
回答
std::set是一个有序的容器,并且在插入时发生排序,这取决于可以用第二个模板参数指定的排序标准。因此,使用带有谓词的set
,该谓词根据到参考点的距离返回true或false。
struct DistanceCompare
{
DistanceCompare(const std::pair<float,float>& point) : point_(point) {}
bool operator()(const std::pair<float,float>& lhs,
const std::pair<float,float>& rhs) const
{
return distance2(lhs) < distance2(rhs);
};
private:
float distance2(const std::pair<float,float>& point) const
{
// calculate distance squared between point and point_
const float x = point.first - point_.first;
const float y = point.second - point_.second;
return x*x + y*y;
}
std::pair<float, float> point_;
};
....
std::pair<float,float> refPoint = ....;
DistanceCompare comp(refPoint);
std::set<std::pair<float, float>, DistanceCompare> pointSet(comp);
这足以比较平方的距离,从而避免调用std::sqrt
。
您忘记将'DistanceCompare'的实例传递给pointSet的构造函数。如图所示,你的例子不会编译,因为'DistanceCompare'没有默认的构造函数。 – atzz
@atzz谢谢,修正。 – juanchopanza
@juanchopanza谢谢你的回答。我添加了像你说的代码,但是当我尝试插入pointSet时,出现错误C2228错误:'.insert'的左侧必须有class/struct/union。任何想法 ? – Damir
两个点之间的距离可以被计算如下:
xd = x2-x1;
yd = y2-y1;
Distance = SquareRoot(xd*xd + yd*yd);
和Distance
值可以用作排序参数。
- 1. 按原点距离对坐标数组进行排序
- 2. 按照Django在Amazon RDS上的距离对点进行排序
- 3. 如何按距离对Solr查询进行排序?
- 4. 按升序对数组进行排序
- 5. 按升序对数字进行排序
- 6. 按钮无法绘制其坐标(x1,x2,y1,y2)的线图
- 7. 如何按距离升序排序一个NSmutable数组?
- 8. 按距离排序
- 9. 算法根据距离源的距离对图中的顶点进行排序
- 10. 如何按数字升序对对象数组进行排序?
- 11. VB如何按升序和降序对ListView进行排序
- 12. 如何按升序对字典的多个值进行排序?
- 13. 如何根据距离数据库的距离对数组进行排序
- 14. 如何从地图坐标获取x1,y1,x2,y2 javascript?
- 15. 如何用点(x1,y1)和角度
- 16. 你如何找到从点(x1,y1)给定的垂线的坐标
- 17. Android的排序按距离
- 18. Django的按距离排序
- 19. 按距离对结果列表进行排序
- 20. 在Swift中按距离对UItableview进行排序
- 21. 在Swift中按计算距离对数组进行排序
- 22. 按距离当前位置对TableView进行排序
- 23. 如何按给定点距离排序行,mysql?
- 24. 如何使用Perl按升序对日期进行排序?
- 25. Python - 如何按升序对数值列表进行排序
- 26. 如何按升序对IntStream进行排序?
- 27. 如何按升序对多维数组输出进行排序?
- 28. 如何按升序对文件名进行排序?
- 29. 如何按升序对Firebase键进行排序?
- 30. 如何在分段表视图中对距离进行排序?
你知道如何计算距离吗? –
编写您自己的谓词来检查您添加的集合点与给定点的距离更小或更大,并使用该比较方法创建集合,集合将自动对其元素进行排序。 – MarsRover