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 により、minmaxclamp メソッドを使用できます。

  • derive した場合は、定義された順序で比較されます。

    enum では、これは各バリアントが、記述された順に前のものより「大きい」と見なされることを意味します。

    struct では、これはフィールドが記述された順に比較されることを意味するため、Totally では name フィールドより前に id フィールドが比較されます。

  • 前提条件: PartialOrd には PartialEqOrd には Eq が必要です。

    Ord を実装するには、型は PartialEqEqPartialOrd も実装していなければなりません。

  • PartialEqEq の場合と同様に、型は PartialOrd を実装せずに Ord を実装することはできません。

    それらの等価性トレイトと同様に、PartialOrd は、全順序ではない順序付けを持つ型(特に浮動小数点数)と全順序を持つ型を分けるために存在します。

  • ソート/検索アルゴリズムや、BTreeMap/BTreeSet スタイルのデータ型の順序を維持するために使用されます。