Trait core::cmp::Ord 1.0.0
[−]
[src]
pub trait Ord: Eq + PartialOrd<Self> {
fn cmp(&self, other: &Self) -> Ordering;
fn max(self, other: Self) -> Self
where
Self: Sized,
{ ... }
fn min(self, other: Self) -> Self
where
Self: Sized,
{ ... }
}Trait for types that form a total order.
An order is a total order if it is (for all a, b and c):
- total and antisymmetric: exactly one of
a < b,a == bora > bis true; and - transitive,
a < bandb < cimpliesa < c. The same must hold for both==and>.
Derivable
This trait can be used with #[derive]. When derived on structs, it will produce a
lexicographic ordering based on the top-to-bottom declaration order of the struct's members.
When derived on enums, variants are ordered by their top-to-bottom declaration order.
How can I implement Ord?
Ord requires that the type also be PartialOrd and Eq (which requires PartialEq).
Then you must define an implementation for cmp(). You may find it useful to use
cmp() on your type's fields.
Implementations of PartialEq, PartialOrd, and Ord must agree with each other. It's
easy to accidentally make them disagree by deriving some of the traits and manually
implementing others.
Here's an example where you want to sort people by height only, disregarding id
and name:
use std::cmp::Ordering; #[derive(Eq)] struct Person { id: u32, name: String, height: u32, } impl Ord for Person { fn cmp(&self, other: &Person) -> Ordering { self.height.cmp(&other.height) } } impl PartialOrd for Person { fn partial_cmp(&self, other: &Person) -> Option<Ordering> { Some(self.cmp(other)) } } impl PartialEq for Person { fn eq(&self, other: &Person) -> bool { self.height == other.height } }Run
Required Methods
fn cmp(&self, other: &Self) -> Ordering
This method returns an Ordering between self and other.
By convention, self.cmp(&other) returns the ordering matching the expression
self <operator> other if true.
Examples
use std::cmp::Ordering; assert_eq!(5.cmp(&10), Ordering::Less); assert_eq!(10.cmp(&5), Ordering::Greater); assert_eq!(5.cmp(&5), Ordering::Equal);Run
Provided Methods
fn max(self, other: Self) -> Self where
Self: Sized, 1.21.0
Self: Sized,
Compares and returns the maximum of two values.
Returns the second argument if the comparison determines them to be equal.
Examples
assert_eq!(2, 1.max(2)); assert_eq!(2, 2.max(2));Run
fn min(self, other: Self) -> Self where
Self: Sized, 1.21.0
Self: Sized,
Implementors
impl<T: Ord> Ord for Wrapping<T>impl<T: Ord> Ord for ManuallyDrop<T>impl<T: Ord + Zeroable> Ord for NonZero<T>impl<Ret> Ord for fn() -> Retimpl<Ret> Ord for extern "C" fn() -> Retimpl<Ret> Ord for unsafe fn() -> Retimpl<Ret> Ord for unsafe extern "C" fn() -> Retimpl<Ret, A> Ord for fn(_: A) -> Retimpl<Ret, A> Ord for extern "C" fn(_: A) -> Retimpl<Ret, A> Ord for extern "C" fn(_: A, ...) -> Retimpl<Ret, A> Ord for unsafe fn(_: A) -> Retimpl<Ret, A> Ord for unsafe extern "C" fn(_: A) -> Retimpl<Ret, A> Ord for unsafe extern "C" fn(_: A, ...) -> Retimpl<Ret, A, B> Ord for fn(_: A, _: B) -> Retimpl<Ret, A, B> Ord for extern "C" fn(_: A, _: B) -> Retimpl<Ret, A, B> Ord for extern "C" fn(_: A, _: B, ...) -> Retimpl<Ret, A, B> Ord for unsafe fn(_: A, _: B) -> Retimpl<Ret, A, B> Ord for unsafe extern "C" fn(_: A, _: B) -> Retimpl<Ret, A, B> Ord for unsafe extern "C" fn(_: A, _: B, ...) -> Retimpl<Ret, A, B, C> Ord for fn(_: A, _: B, _: C) -> Retimpl<Ret, A, B, C> Ord for extern "C" fn(_: A, _: B, _: C) -> Retimpl<Ret, A, B, C> Ord for extern "C" fn(_: A, _: B, _: C, ...) -> Retimpl<Ret, A, B, C> Ord for unsafe fn(_: A, _: B, _: C) -> Retimpl<Ret, A, B, C> Ord for unsafe extern "C" fn(_: A, _: B, _: C) -> Retimpl<Ret, A, B, C> Ord for unsafe extern "C" fn(_: A, _: B, _: C, ...) -> Retimpl<Ret, A, B, C, D> Ord for fn(_: A, _: B, _: C, _: D) -> Retimpl<Ret, A, B, C, D> Ord for extern "C" fn(_: A, _: B, _: C, _: D) -> Retimpl<Ret, A, B, C, D> Ord for extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Retimpl<Ret, A, B, C, D> Ord for unsafe fn(_: A, _: B, _: C, _: D) -> Retimpl<Ret, A, B, C, D> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D) -> Retimpl<Ret, A, B, C, D> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, ...) -> Retimpl<Ret, A, B, C, D, E> Ord for fn(_: A, _: B, _: C, _: D, _: E) -> Retimpl<Ret, A, B, C, D, E> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E) -> Retimpl<Ret, A, B, C, D, E> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Retimpl<Ret, A, B, C, D, E> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E) -> Retimpl<Ret, A, B, C, D, E> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E) -> Retimpl<Ret, A, B, C, D, E> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, ...) -> Retimpl<Ret, A, B, C, D, E, F> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Retimpl<Ret, A, B, C, D, E, F> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Retimpl<Ret, A, B, C, D, E, F> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Retimpl<Ret, A, B, C, D, E, F> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Retimpl<Ret, A, B, C, D, E, F> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F) -> Retimpl<Ret, A, B, C, D, E, F> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, ...) -> Retimpl<Ret, A, B, C, D, E, F, G> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Retimpl<Ret, A, B, C, D, E, F, G> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Retimpl<Ret, A, B, C, D, E, F, G> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Retimpl<Ret, A, B, C, D, E, F, G> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Retimpl<Ret, A, B, C, D, E, F, G> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G) -> Retimpl<Ret, A, B, C, D, E, F, G> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Retimpl<Ret, A, B, C, D, E, F, G, H> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Retimpl<Ret, A, B, C, D, E, F, G, H> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Retimpl<Ret, A, B, C, D, E, F, G, H> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H) -> Retimpl<Ret, A, B, C, D, E, F, G, H> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Ord for fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Ord for extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L, ...) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Ord for unsafe fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L) -> Retimpl<Ret, A, B, C, D, E, F, G, H, I, J, K, L> Ord for unsafe extern "C" fn(_: A, _: B, _: C, _: D, _: E, _: F, _: G, _: H, _: I, _: J, _: K, _: L, ...) -> Retimpl<T: ?Sized> Ord for *const Timpl<T: ?Sized> Ord for *mut Timpl<T: ?Sized> Ord for PhantomData<T>impl<Y: Ord, R: Ord> Ord for GeneratorState<Y, R>impl Ord for ()impl Ord for boolimpl Ord for charimpl Ord for usizeimpl Ord for u8impl Ord for u16impl Ord for u32impl Ord for u64impl Ord for u128impl Ord for isizeimpl Ord for i8impl Ord for i16impl Ord for i32impl Ord for i64impl Ord for i128impl Ord for !impl<'a, A: ?Sized> Ord for &'a A where
A: Ord,impl<'a, A: ?Sized> Ord for &'a mut A where
A: Ord,impl<T: Ord> Ord for Reverse<T>impl Ord for Orderingimpl Ord for Infallibleimpl Ord for TypeIdimpl<T: Ord> Ord for [T; 0]impl<T: Ord> Ord for [T; 1]impl<T: Ord> Ord for [T; 2]impl<T: Ord> Ord for [T; 3]impl<T: Ord> Ord for [T; 4]impl<T: Ord> Ord for [T; 5]impl<T: Ord> Ord for [T; 6]impl<T: Ord> Ord for [T; 7]impl<T: Ord> Ord for [T; 8]impl<T: Ord> Ord for [T; 9]impl<T: Ord> Ord for [T; 10]impl<T: Ord> Ord for [T; 11]impl<T: Ord> Ord for [T; 12]impl<T: Ord> Ord for [T; 13]impl<T: Ord> Ord for [T; 14]impl<T: Ord> Ord for [T; 15]impl<T: Ord> Ord for [T; 16]impl<T: Ord> Ord for [T; 17]impl<T: Ord> Ord for [T; 18]impl<T: Ord> Ord for [T; 19]impl<T: Ord> Ord for [T; 20]impl<T: Ord> Ord for [T; 21]impl<T: Ord> Ord for [T; 22]impl<T: Ord> Ord for [T; 23]impl<T: Ord> Ord for [T; 24]impl<T: Ord> Ord for [T; 25]impl<T: Ord> Ord for [T; 26]impl<T: Ord> Ord for [T; 27]impl<T: Ord> Ord for [T; 28]impl<T: Ord> Ord for [T; 29]impl<T: Ord> Ord for [T; 30]impl<T: Ord> Ord for [T; 31]impl<T: Ord> Ord for [T; 32]impl<T: Ord + Copy> Ord for Cell<T>impl<T: ?Sized + Ord> Ord for RefCell<T>impl<T: Ord> Ord for Option<T>impl Ord for NoneErrorimpl<T: Ord, E: Ord> Ord for Result<T, E>impl<T: Ord> Ord for [T]impl Ord for strimpl Ord for Errorimpl<A> Ord for (A,) where
A: Ord + ?Sized,impl<A: Ord, B> Ord for (A, B) where
B: Ord + ?Sized,impl<A: Ord, B: Ord, C> Ord for (A, B, C) where
C: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D> Ord for (A, B, C, D) where
D: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E> Ord for (A, B, C, D, E) where
E: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F> Ord for (A, B, C, D, E, F) where
F: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F: Ord, G> Ord for (A, B, C, D, E, F, G) where
G: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F: Ord, G: Ord, H> Ord for (A, B, C, D, E, F, G, H) where
H: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F: Ord, G: Ord, H: Ord, I> Ord for (A, B, C, D, E, F, G, H, I) where
I: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F: Ord, G: Ord, H: Ord, I: Ord, J> Ord for (A, B, C, D, E, F, G, H, I, J) where
J: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F: Ord, G: Ord, H: Ord, I: Ord, J: Ord, K> Ord for (A, B, C, D, E, F, G, H, I, J, K) where
K: Ord + ?Sized,impl<A: Ord, B: Ord, C: Ord, D: Ord, E: Ord, F: Ord, G: Ord, H: Ord, I: Ord, J: Ord, K: Ord, L> Ord for (A, B, C, D, E, F, G, H, I, J, K, L) where
L: Ord + ?Sized,