美文网首页
rust - Ord and Ordering

rust - Ord and Ordering

作者: 家中古词 | 来源:发表于2019-06-08 16:24 被阅读0次

std::cmp::Ordering 是表达比较结果的枚举。

std::cmp::Ord 是表现全序关系的 trait。实现这个 trait 的结构只需要实现 fn cmp (&self, other: &Self) -> Ordering,trait 默认有对 gtlt 等函数的实现。

如果定义了一个结构:

struct Girl {
  name: String,
  age: u32,
  face: u32,
}

要在 Girl 之间定义按照年龄排序的比较关系。只需要:

impl Ord for Girl {
  fn cmp(&self, other &Self) -> Ordering { self.age.cmp(other.age) }
}

这里利用了 u32 已经实现了 Ord

有趣的是,Ordering 本身也实现了 Ord

enum Ordering {
  Less = -1,
  Equal = 0,
  Greater = 1,
}

Ordering 的比较结果是按照枚举绑定的值比较得出的。有些时候一种结构需要定义若干不同的比较。

fn cmp_age(lhs &Self, rhs &Self) -> Ordering { lhs.age.cmp(rhs.age) }
fn cmp_face(lhs &Self, rhs &Self) -> Ordering { lhs.face.cmp(rhs.face) }

这样的话,可以用 cmp_age(&lhs, &rhs) <= Ordering::Equal 表示 lhs <= rhs,以此类推。

相关文章

网友评论

      本文标题:rust - Ord and Ordering

      本文链接:https://www.haomeiwen.com/subject/vhzuxctx.html