为了账号安全,请及时绑定邮箱和手机立即绑定

算子<与严格弱序

算子<与严格弱序

C++
明月笑刀无情 2019-06-24 16:55:14
算子<与严格弱序如何定义operator<在n-tuple上(例如,在3-tuple上),以便它满足严格弱序概念?我知道Boost库具有定义正确的tuple类。operator<但出于某些原因我不能用它。
查看完整描述

3 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

if (a1 < b1)
  return true;if (b1 < a1)
  return false;// a1==b1: continue with element 2if (a2 < b2)
  return true;if (b2 < a2)
  return false;// a2 == b2: continue with element 3if (a3 < b3)
  return true;return false; // early out

这将元素排序为A1最显着,A3最不显着。

这可以无限地继续,你也可以把它应用到T的向量上,迭代一[i]<a[i+1]/a[i+1]<a[i]的比较。算法的另一个表达式是“在相同的情况下跳过,然后进行比较”:

while (i<count-1 && !(a[i] < a[i+1]) && !(a[i+1] < a[i])
  ++i;return i < count-1 && a[i] < a[i+1];

当然,如果比较昂贵,您可能需要缓存比较结果。


[编辑]删除错误代码


[编辑]如果不仅仅是operator<是可用的,我倾向于使用这种模式。

if (a1 != b1)
  return a1 < b1;if (a2 != b2)
  return a2 < b2;...


查看完整回答
反对 回复 2019-06-24
?
忽然笑

TA贡献1806条经验 获得超5个赞

严格弱序

这是一个数学术语,用来定义两个对象之间的关系。
其定义是:

如果f(x,y)和f(y,x)都是假的,则两个对象x和y是等价的。注意,对象总是(通过非自反性不变式)与自身等效。

就C+而言,这意味着如果您有两个给定类型的对象,则与运算符<相比,您应该返回以下值。

X    a;X    b;Condition:                  Test:     Resulta is equivalent to b:      
 a < b     falsea is equivalent to b        b < a     falsea is less than b        
     a < b     truea is less than b            b < a     falseb is less than a          
       a < b     falseb is less than a            b < a     true

定义等效/较少的方法完全取决于对象的类型。

正式定义:
严格弱序

计算机科学:
严格弱序

与经营者的关系:
比较器


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 550 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信