如何在具有大量可比字段的對象之間提供嚴格的排序?在與多個字段比較時提供嚴格的排序
假設你有兩個對象x
和你有比較y
,每3個字段(A,B,C)
bool less(x, y)
return x.a < y.a || x.b < y.b || x.c < y.c
好,但這提供弱排序。如果x.a < y.a和y.b < x.b,less(x,y)
爲真,less(y, x)
也是如此。
我習慣寫
bool less(x, y)
return x.a < y.a || (x.a == y.a && x.b < y.b)
但它開始變得非常難看,一旦領域所涉及的數量增長。
bool less(x, y)
return x.a < y.a ||
(x.a == y.a && x.b < y.b) ||
(x.a == y.a && x.b == y.b && x.c < y.c) ||
(x.a == y.a && x.b == y.b && x.c == y.c && x.d < y.d);
有人有更好看的算法嗎?
我想你需要定義什麼是最重要的領域,什麼是較少的。訂購應該(我認爲)要精確確定。基本上,你首先檢查什麼屬性,什麼是第二,什麼是第三? –
我很想這樣做,但由於問題的性質,比較*必須*考慮每個領域的某種方式 – UmNyobe
另一種選擇是創建一個函數,對三個(或四個或十個)屬性給你一個值,* *是你比較的。類似於'val_to_compare = 1 * a + 10 * b + 23 * c'。這給你一種附加權重的方法。 –