PartialOrd と Ord
半順序と全順序。
導出可能: ✅
// 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 した場合は、定義された順序で比較されます。
enum では、これは各バリアントが、記述された順に前のものより「大きい」と見なされることを意味します。
struct では、これはフィールドが記述された順に比較されることを意味するため、
Totallyではnameフィールドより前にidフィールドが比較されます。 -
前提条件:
PartialOrdにはPartialEq、OrdにはEqが必要です。Ordを実装するには、型はPartialEq、Eq、PartialOrdも実装していなければなりません。 -
PartialEqとEqの場合と同様に、型はPartialOrdを実装せずにOrdを実装することはできません。それらの等価性トレイトと同様に、
PartialOrdは、全順序ではない順序付けを持つ型(特に浮動小数点数)と全順序を持つ型を分けるために存在します。 -
ソート/検索アルゴリズムや、
BTreeMap/BTreeSetスタイルのデータ型の順序を維持するために使用されます。