2

std::map のキーの型として独自のクラスを使用します。2 つのオブジェクトが等しい場合、マップの実装はどのように判断しますか?

要素を配置するために operator< または Comp タイプを決定できることを知っています。しかし、私は平等について何も見つけることができません。

4

2 に答える 2

4

のみを使用して比較を行うことができるため、同様operator<に定義する必要はありません。operator==基本的に、一方が他方より小さくなく、他方が最初より小さくない場合、それらは等しくなければなりません。これは、次のようなユーティリティ関数の実装の可能性です。

bool isEqual(const Type &arg1, const Type &arg2) const {
    return !(arg1 < arg2) && !(arg2 < arg1);
}
于 2012-11-10T19:45:28.357 に答える
4

クラスは、std::map<K, V, Comp>実際にはオブジェクトが等しいかどうかを判断しません! 気にするのは、2 つのオブジェクトが同じ等価クラスの一部であるかどうかだけです。

Comp comp;
if (!comp(a, b) && !comp(b, a)) {
    // a and b are in the same equivalence class
}

のデフォルトの定義はCompoですstd::less<K>。つまり、クラスは、どちらのオブジェクトも他方よりも小さいとして等価性を判断します。

于 2012-11-10T19:45:51.823 に答える