gpt4 book ai didi

c++ - 运算符<和严格弱排序

转载 作者:行者123 更新时间:2023-12-01 14:08:06 25 4
gpt4 key购买 nike

如何定义 operator<在 n 元组上(例如在 3 元组上),使其满足 严格弱排序 概念 ?我知道 boost 库具有正确定义的元组类 operator<但由于某些原因我不能使用它。

最佳答案

严格弱排序
这是一个数学术语,用于定义两个对象之间的关系。
它的定义是:

Two objects x and y are equivalent if both f(x, y) and f(y, x) are false. Note that an object is always (by the irreflexivity invariant) equivalent to itself.


就 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
如何定义等效/更少完全取决于对象的类型。
正式定义:
Strict Weak ordering
计算机科学:
Strict Weak Ordering
它与运营商的关系:
Comparator

作为旁注,我们可以手动实现严格的弱排序。但是我们可以简单地使用 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);
}
注意:这里假设 thingAthingB已经实现了严格的弱排序。
我们也可以用同样的方式实现相等:
bool operator==(S const& lhs, S const& rhs)
{
return std::tie(lhs.a, lhs.b) == std::tie(rhs.a, rhs.b);
}
再次注意:这里假设 thingAthingB已经实现平等。

关于c++ - 运算符<和严格弱排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62462181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com