std::cmp::Ordering
是表达比较结果的枚举。
std::cmp::Ord
是表现全序关系的 trait。实现这个 trait 的结构只需要实现 fn cmp (&self, other: &Self) -> Ordering
,trait 默认有对 gt
、lt
等函数的实现。
如果定义了一个结构:
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
,以此类推。
网友评论