Sorting 将两个数字映射为一以实现特定排序?

Sorting 将两个数字映射为一以实现特定排序?,sorting,Sorting,我有一个列表,其中每个项目有两个整数属性,n和m。我想将这两个整数属性映射到一个新属性,这样当列表在新属性上排序时,它首先在n上排序,然后用m打破联系 我想出了n-1/m。所以这两个整数被映射到一个实数。我认为这是可行的。有更好的主意吗?这很聪明,所以我不想告诉你,但这行不通。使用n=1000000000和介于9999999 0和100000010之间的m值(使用计算机)进行尝试。您会发现n-1/m对于所有这些情况都是相同的值 如果浮点数的精度是无穷大的,或者即使它们的精度是整数的两倍(尽管即使

我有一个列表,其中每个项目有两个整数属性,n和m。我想将这两个整数属性映射到一个新属性,这样当列表在新属性上排序时,它首先在n上排序,然后用m打破联系


我想出了n-1/m。所以这两个整数被映射到一个实数。我认为这是可行的。有更好的主意吗?

这很聪明,所以我不想告诉你,但这行不通。使用n=1000000000和介于9999999 0和100000010之间的m值(使用计算机)进行尝试。您会发现
n-1/m
对于所有这些情况都是相同的值


如果浮点数的精度是无穷大的,或者即使它们的精度是整数的两倍(尽管即使在这一点上,您可能会遇到一些问题),它也会起作用,但事实并非如此:双精度浮点数的精度为53位。一个整数(可能)是32位,所以至少需要64位来编码其中的两个。但是,您可以使用一个64位(长-长)整数,将这对整数编码为
n*2^32+m

如果每个整数都是固定宽度的,比如说16位,那么它们可以组合成单个整数,比如说32位,非常简单。注意特定的标志细节。使用FP时,请注意可能导致重复映射的相对精度问题。