严格弱序
这是一个数学术语,用于定义两个对象之间的关系。
它的定义是:
如果 f(x, y) 和 f(y, x) 都为假,则两个对象 x 和 y 是等价的。请注意,对象始终(通过反自不变量)等于其自身。
就 C++ 而言,这意味着如果您有两个给定类型的对象,则与运算符
X a;
X b;
Condition: Test: Result
a is equivalent to b: a < b false
a is equivalent to b b < a false
a is less than b a < b true
a is less than b b < a false
b is less than a a < b false
b is less than a b < a true
如何定义等效/更少完全取决于对象的类型。
正式定义:
严格弱排序
计算机科学:
严格弱排序
它与运营商有何关系:
比较器
作为旁注,我们可以手动实现严格的弱排序。但我们可以简单地使用std::tuple
它已经为你实现了。您只需要创建一个元组而不复制对象。
struct S
{
ThingA a;
ThingB b;
};
bool operator<(S const& lhs, S const& rhs)
{
return std::tie(lhs.a, lhs.b) < std::tie(rhs.a, rhs.b);
}
注意:这假设thingA
and thingB
自己已经实施了严格的弱排序。
我们也可以用同样的方式实现平等:
bool operator==(S const& lhs, S const& rhs)
{
return std::tie(lhs.a, lhs.b) == std::tie(rhs.a, rhs.b);
}
再次注意:这假设thingA
and thingB
已经实行平等。