比較可能なフィールドが多いオブジェクト間で厳密な順序付けを行うにはどうすればよいですか?複数のフィールドとの比較時に厳密な順序を指定する
はあなたが比較する必要が二つのオブジェクト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)
もtrueです。
私は
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);
誰かが見た目の良いアルゴリズムを持っていますか?
私はあなたが何が最も重要なフィールドであるか、それより少ないものを定義する必要があると思います。注文は正確に決めるべきだと思います。基本的に、最初にチェックするプロパティは何ですか、秒は何ですか?そして第3は何ですか? –
私はそれをやりたいですが、問題の性質上、比較*は各フィールドを何らかの方法で考慮しなければなりません – UmNyobe
もう一つの選択肢は、3つ(または4つ、または10つ)の計算を行う関数を作成することです。あなたに一つの値を与え、*あなたが比較するものであるプロパティ。 'val_to_compare = 1 * a + 10 * b + 23 * c'のようなものです。これにより、プロパティにウェイトを付けることができます。 –