次のような比較関数を使用して、同じキーの複数の挿入をサポートしない RedBlack ツリーを使用することを考えていました。
int compare(MyObject A, MyObject B)
{
if (A.error > B.error) return 1;
if (A.error < B.error) return -1;
if (A.name == B.name) return 0;
return 1;
}
このトリックは、同じエラーで異なる「名前」のアイテムが複数ある場合に役立ちます。同じエラーのアイテムが 2 つ見つかったが、値が一致しない場合、比較したアイテムは単に「大きい」として扱われます。
このトリックは通常の BST で機能すると確信していますが、redblack ツリーで問題が発生しています。私は赤黒木アルゴリズムを知りません。私は実装を使用しているので、これが機能しない理由があるのだろうかと思います。
PS: name には比較関係がありません...だから、私にできることは、それらが同じかどうかを確認することだけです。
PPS:これが機能しないと仮定し、「名前」値の間に順序関係を持たせないことを知っている場合、他にどのような可能性がありますか? 同じキーで複数の値を挿入できるデータ構造を使用できますが、それはうまくいきません。値を削除するときは、実際に渡している値を削除していることを確認する必要があるためです (基本的には私はキーと値が同じものを共有しているので、並べ替えられたマルチセット データ構造が必要です!)