Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.