您如何定义总订单?例如,如果您需要定义总排序或形状等,您将如何进行此操作?
编辑:具体来说,您如何根据具有坐标(x,y,z)的对象定义总订单。我不明白你如何构建一个排序,每个对象都是唯一的和可排序的。
答案 0 :(得分:1)
2D或3D对象没有“自然”排序。但是,如果要引入排序,可以按坐标进行比较,例如:
// returns -1 if o1<o2, 1 if o1>o2, 0 if o1==o2
int Compare(MyObject o1 ,MyObject o2)
{
if(o1.x>o2.x) return 1;
if(o1.x<o2.x) return -1;
if(o1.y>o2.y) return 1;
if(o1.y<o2.y) return -1;
if(o1.z>o2.z) return 1;
if(o1.z<o2.z) return -1;
return 0;
}
这假设对象由其坐标唯一标识。
此排序可让您对这些对象进行排序和比较。您必须自己回答的问题是,它是否可以帮助您解决任何您想要解决的问题。 1D集上的排序通常用于更快地进行查找,尤其是当您不仅需要集合中的特定元素,而且还需要来自给定范围的所有元素时。
对于2D或3D集,类似的问题是找到给定矩形或立方体内的所有元素集。为此目的,上述顺序并不能很好地支持你。像2D quadtree或3D octree这样的数据结构可以更好地支持这项任务。