0

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

我想出了 n - 1/m。所以这两个整数映射到一个实数。我认为这行得通。有更好的想法吗?

4

1 回答 1

1

这很聪明,所以我不想把它告诉你,但它不会起作用。使用 n=1,000,000,000 和 m 的值在 999,999,990 和 1,000,000,010 之间尝试(使用计算机)。您会发现n-1/m所有这些情况的值都相同。

如果浮点数具有无限精度,或者即使它们的精度是 int 的两倍(尽管即使在那里你可能会遇到一些问题),它也会起作用,但它们不会:双精度浮点数有 53 位的精度。一个整数(可能)是 32 位,因此您至少需要 64 位来编码其中的两个。但是,您可以只使用一个 64 位(long long)整数,将该对编码为n*2^32 + m.

于 2012-11-12T04:27:23.173 回答