PartialOrd и Ord
Частичный порядок и полный порядок.
Можно получить через derive: ✅
// Copyright 2025 Google LLC
// SPDX-License-Identifier: Apache-2.0
#[derive(PartialEq, PartialOrd)]
pub struct Partially(f32);
#[derive(PartialEq, Eq, PartialOrd, Ord)]
pub struct Totally {
id: u32,
name: String,
}
fn main() {
let a = Totally { id: 0, name: "alice".into() };
let b = Totally { id: 1, name: "alice".into() };
let c = Totally { id: 0, name: "charlie".into() };
dbg!(a.cmp(&b));
dbg!(a.cmp(&c));
}
-
Методы, связанные со сравнением. Если тип реализует
PartialOrd/Ord, то с этим типом можно использовать операторы сравнения (<,<=,>,>=). -
Ordдаёт доступ к методамmin,maxиclamp. -
При получении через derive сравнивает в порядке определения.
Для перечислений это значит, что каждый вариант считается «больше» предыдущего в порядке, в котором они записаны.
Для структур это значит, что поля сравниваются в порядке записи, так что поля
idсравниваются раньше полейnameвTotally. -
Предусловия:
PartialEqдляPartialOrd,EqдляOrd.Чтобы реализовать
Ord, тип также должен реализоватьPartialEq,EqиPartialOrd. -
Как и в случае с
PartialEqиEq, тип не может реализоватьOrdбез реализацииPartialOrd.Как и трейты равенства,
PartialOrdсуществует, чтобы отделить типы с неполным порядком (особенно числа с плавающей запятой) от типов с полным порядком. -
Используется в алгоритмах сортировки и поиска и для поддержания порядка в типах данных вроде
BTreeMap/BTreeSet.