定义总订单

时间:2011-10-18 08:13:01

标签: language-agnostic

您如何定义总订单?例如,如果您需要定义总排序或形状等,您将如何进行此操作?

编辑:具体来说,您如何根据具有坐标(x,y,z)的对象定义总订单。我不明白你如何构建一个排序,每个对象都是唯一的和可排序的。

1 个答案:

答案 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这样的数据结构可以更好地支持这项任务。