Expand description
The subtraction operator -
.
Note that Rhs
is Self
by default, but this is not mandatory. For
example, std::time::SystemTime
implements Sub<Duration>
, which permits
operations of the form SystemTime = SystemTime - Duration
.
Examples
Sub
tractable points
use std::ops::Sub;
#[derive(Debug, Copy, Clone, PartialEq)]
struct Point {
x: i32,
y: i32,
}
impl Sub for Point {
type Output = Self;
fn sub(self, other: Self) -> Self::Output {
Self {
x: self.x - other.x,
y: self.y - other.y,
}
}
}
assert_eq!(Point { x: 3, y: 3 } - Point { x: 2, y: 3 },
Point { x: 1, y: 0 });
Implementing Sub
with generics
Here is an example of the same Point
struct implementing the Sub
trait
using generics.
use std::ops::Sub;
#[derive(Debug, PartialEq)]
struct Point<T> {
x: T,
y: T,
}
// Notice that the implementation uses the associated type `Output`.
impl<T: Sub<Output = T>> Sub for Point<T> {
type Output = Self;
fn sub(self, other: Self) -> Self::Output {
Point {
x: self.x - other.x,
y: self.y - other.y,
}
}
}
assert_eq!(Point { x: 2, y: 3 } - Point { x: 1, y: 0 },
Point { x: 1, y: 3 });
Associated Types
Required methods
Implementations on Foreign Types
1.8.0 · sourceimpl Sub<Instant> for Instant
impl Sub<Instant> for Instant
sourcefn sub(self, other: Instant) -> Duration
fn sub(self, other: Instant) -> Duration
Returns the amount of time elapsed from another instant to this one, or zero duration if that instant is later than this one.
Panics
Previous rust versions panicked when other
was later than self
. Currently this
method saturates. Future versions may reintroduce the panic in some circumstances.
See Monotonicity.
type Output = Duration
1.8.0 · sourceimpl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
type Output = SystemTime
fn sub(self, dur: Duration) -> SystemTime
sourceimpl<'_, '_, T, S> Sub<&'_ HashSet<T, S>> for &'_ HashSet<T, S> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S>> for &'_ HashSet<T, S> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
sourcefn sub(self, rhs: &HashSet<T, S>) -> HashSet<T, S>
fn sub(self, rhs: &HashSet<T, S>) -> HashSet<T, S>
Returns the difference of self
and rhs
as a new HashSet<T, S>
.
Examples
use std::collections::HashSet;
let a = HashSet::from([1, 2, 3]);
let b = HashSet::from([3, 4, 5]);
let set = &a - &b;
let mut i = 0;
let expected = [1, 2];
for x in &set {
assert!(expected.contains(x));
i += 1;
}
assert_eq!(i, expected.len());
type Output = HashSet<T, S>
sourceimpl<'a> Sub<Saturating<u128>> for &'a Saturating<u128>
impl<'a> Sub<Saturating<u128>> for &'a Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
fn sub(
self,
other: Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i64>> for Saturating<i64>
impl<'_> Sub<&'_ Saturating<i64>> for Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
fn sub(
self,
other: &Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl Sub<Saturating<u32>> for Saturating<u32>
impl Sub<Saturating<u32>> for Saturating<u32>
type Output = Saturating<u32>
fn sub(self, other: Saturating<u32>) -> Saturating<u32>
sourceimpl<'_> Sub<&'_ Saturating<i32>> for Saturating<i32>
impl<'_> Sub<&'_ Saturating<i32>> for Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
fn sub(
self,
other: &Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl<const N: usize> Sub<Simd<u64, N>> for Simd<u64, N> where
u64: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u64, N>> for Simd<u64, N> where
u64: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_, '_> Sub<&'_ Saturating<u8>> for &'_ Saturating<u8>
impl<'_, '_> Sub<&'_ Saturating<u8>> for &'_ Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
fn sub(
self,
other: &Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<u64>> for &'_ Saturating<u64>
impl<'_, '_> Sub<&'_ Saturating<u64>> for &'_ Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
fn sub(
self,
other: &Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl<'a> Sub<Saturating<i16>> for &'a Saturating<i16>
impl<'a> Sub<Saturating<i16>> for &'a Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
fn sub(
self,
other: Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<i128>> for &'_ Saturating<i128>
impl<'_, '_> Sub<&'_ Saturating<i128>> for &'_ Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
fn sub(
self,
other: &Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::Output
sourceimpl<const N: usize> Sub<Simd<i8, N>> for Simd<i8, N> where
i8: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i8, N>> for Simd<i8, N> where
i8: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<i8>> for Saturating<i8>
impl<'_> Sub<&'_ Saturating<i8>> for Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
fn sub(
self,
other: &Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<u64>> for Saturating<u64>
impl<'_> Sub<&'_ Saturating<u64>> for Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
fn sub(
self,
other: &Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<u128>> for Saturating<u128>
impl<'_> Sub<&'_ Saturating<u128>> for Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
fn sub(
self,
other: &Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl<const N: usize> Sub<Simd<u32, N>> for Simd<u32, N> where
u32: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u32, N>> for Simd<u32, N> where
u32: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<const N: usize> Sub<Simd<i16, N>> for Simd<i16, N> where
i16: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i16, N>> for Simd<i16, N> where
i16: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_, '_> Sub<&'_ Saturating<i16>> for &'_ Saturating<i16>
impl<'_, '_> Sub<&'_ Saturating<i16>> for &'_ Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
fn sub(
self,
other: &Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl<'a> Sub<Saturating<i64>> for &'a Saturating<i64>
impl<'a> Sub<Saturating<i64>> for &'a Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
fn sub(
self,
other: Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<i64>> for &'_ Saturating<i64>
impl<'_, '_> Sub<&'_ Saturating<i64>> for &'_ Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
fn sub(
self,
other: &Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl Sub<Saturating<i64>> for Saturating<i64>
impl Sub<Saturating<i64>> for Saturating<i64>
type Output = Saturating<i64>
fn sub(self, other: Saturating<i64>) -> Saturating<i64>
sourceimpl<'_, T, const LANES: usize> Sub<&'_ Simd<T, LANES>> for Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
impl<'_, T, const LANES: usize> Sub<&'_ Simd<T, LANES>> for Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
sourceimpl<'_> Sub<&'_ Saturating<u8>> for Saturating<u8>
impl<'_> Sub<&'_ Saturating<u8>> for Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
fn sub(
self,
other: &Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl<'a> Sub<Saturating<u8>> for &'a Saturating<u8>
impl<'a> Sub<Saturating<u8>> for &'a Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
fn sub(
self,
other: Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl Sub<Saturating<u16>> for Saturating<u16>
impl Sub<Saturating<u16>> for Saturating<u16>
type Output = Saturating<u16>
fn sub(self, other: Saturating<u16>) -> Saturating<u16>
sourceimpl<const N: usize> Sub<Simd<usize, N>> for Simd<usize, N> where
usize: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<usize, N>> for Simd<usize, N> where
usize: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl Sub<Saturating<u8>> for Saturating<u8>
impl Sub<Saturating<u8>> for Saturating<u8>
type Output = Saturating<u8>
fn sub(self, other: Saturating<u8>) -> Saturating<u8>
sourceimpl<const N: usize> Sub<Simd<isize, N>> for Simd<isize, N> where
isize: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<isize, N>> for Simd<isize, N> where
isize: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'a> Sub<Saturating<i128>> for &'a Saturating<i128>
impl<'a> Sub<Saturating<i128>> for &'a Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
fn sub(
self,
other: Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::Output
sourceimpl<'a> Sub<Saturating<i8>> for &'a Saturating<i8>
impl<'a> Sub<Saturating<i8>> for &'a Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
fn sub(
self,
other: Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<usize>> for &'_ Saturating<usize>
impl<'_, '_> Sub<&'_ Saturating<usize>> for &'_ Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
fn sub(
self,
other: &Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl<'a> Sub<Saturating<u32>> for &'a Saturating<u32>
impl<'a> Sub<Saturating<u32>> for &'a Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
fn sub(
self,
other: Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i128>> for Saturating<i128>
impl<'_> Sub<&'_ Saturating<i128>> for Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
fn sub(
self,
other: &Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<u32>> for Saturating<u32>
impl<'_> Sub<&'_ Saturating<u32>> for Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
fn sub(
self,
other: &Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl<'_, T, const LANES: usize> Sub<Simd<T, LANES>> for &'_ Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
impl<'_, T, const LANES: usize> Sub<Simd<T, LANES>> for &'_ Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
sourceimpl<'lhs, 'rhs, T, const LANES: usize> Sub<&'rhs Simd<T, LANES>> for &'lhs Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
impl<'lhs, 'rhs, T, const LANES: usize> Sub<&'rhs Simd<T, LANES>> for &'lhs Simd<T, LANES> where
T: SimdElement,
Simd<T, LANES>: Sub<Simd<T, LANES>>,
LaneCount<LANES>: SupportedLaneCount,
<Simd<T, LANES> as Sub<Simd<T, LANES>>>::Output == Simd<T, LANES>,
sourceimpl Sub<Saturating<isize>> for Saturating<isize>
impl Sub<Saturating<isize>> for Saturating<isize>
type Output = Saturating<isize>
fn sub(self, other: Saturating<isize>) -> Saturating<isize>
sourceimpl<'_, '_> Sub<&'_ Saturating<u128>> for &'_ Saturating<u128>
impl<'_, '_> Sub<&'_ Saturating<u128>> for &'_ Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
fn sub(
self,
other: &Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<isize>> for &'_ Saturating<isize>
impl<'_, '_> Sub<&'_ Saturating<isize>> for &'_ Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
fn sub(
self,
other: &Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
sourceimpl<const N: usize> Sub<Simd<f32, N>> for Simd<f32, N> where
f32: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<f32, N>> for Simd<f32, N> where
f32: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_, '_> Sub<&'_ Saturating<u32>> for &'_ Saturating<u32>
impl<'_, '_> Sub<&'_ Saturating<u32>> for &'_ Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
fn sub(
self,
other: &Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<isize>> for Saturating<isize>
impl<'_> Sub<&'_ Saturating<isize>> for Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
fn sub(
self,
other: &Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
sourceimpl<'a> Sub<Saturating<isize>> for &'a Saturating<isize>
impl<'a> Sub<Saturating<isize>> for &'a Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
fn sub(
self,
other: Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
sourceimpl<'_> Sub<&'_ Saturating<i16>> for Saturating<i16>
impl<'_> Sub<&'_ Saturating<i16>> for Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
fn sub(
self,
other: &Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl Sub<Saturating<usize>> for Saturating<usize>
impl Sub<Saturating<usize>> for Saturating<usize>
type Output = Saturating<usize>
fn sub(self, other: Saturating<usize>) -> Saturating<usize>
sourceimpl Sub<Saturating<u128>> for Saturating<u128>
impl Sub<Saturating<u128>> for Saturating<u128>
type Output = Saturating<u128>
fn sub(self, other: Saturating<u128>) -> Saturating<u128>
sourceimpl<'a> Sub<Saturating<i32>> for &'a Saturating<i32>
impl<'a> Sub<Saturating<i32>> for &'a Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
fn sub(
self,
other: Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl<const N: usize> Sub<Simd<f64, N>> for Simd<f64, N> where
f64: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<f64, N>> for Simd<f64, N> where
f64: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<const N: usize> Sub<Simd<u8, N>> for Simd<u8, N> where
u8: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u8, N>> for Simd<u8, N> where
u8: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl Sub<Saturating<i8>> for Saturating<i8>
impl Sub<Saturating<i8>> for Saturating<i8>
type Output = Saturating<i8>
fn sub(self, other: Saturating<i8>) -> Saturating<i8>
sourceimpl<'a> Sub<Saturating<u64>> for &'a Saturating<u64>
impl<'a> Sub<Saturating<u64>> for &'a Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
fn sub(
self,
other: Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl Sub<Saturating<i128>> for Saturating<i128>
impl Sub<Saturating<i128>> for Saturating<i128>
type Output = Saturating<i128>
fn sub(self, other: Saturating<i128>) -> Saturating<i128>
sourceimpl Sub<Saturating<i32>> for Saturating<i32>
impl Sub<Saturating<i32>> for Saturating<i32>
type Output = Saturating<i32>
fn sub(self, other: Saturating<i32>) -> Saturating<i32>
sourceimpl<'_, '_> Sub<&'_ Saturating<i8>> for &'_ Saturating<i8>
impl<'_, '_> Sub<&'_ Saturating<i8>> for &'_ Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
fn sub(
self,
other: &Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<i32>> for &'_ Saturating<i32>
impl<'_, '_> Sub<&'_ Saturating<i32>> for &'_ Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
fn sub(
self,
other: &Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl<'a> Sub<Saturating<u16>> for &'a Saturating<u16>
impl<'a> Sub<Saturating<u16>> for &'a Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
fn sub(
self,
other: Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl<const N: usize> Sub<Simd<i32, N>> for Simd<i32, N> where
i32: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i32, N>> for Simd<i32, N> where
i32: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl Sub<Saturating<i16>> for Saturating<i16>
impl Sub<Saturating<i16>> for Saturating<i16>
type Output = Saturating<i16>
fn sub(self, other: Saturating<i16>) -> Saturating<i16>
sourceimpl<'_> Sub<&'_ Saturating<usize>> for Saturating<usize>
impl<'_> Sub<&'_ Saturating<usize>> for Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
fn sub(
self,
other: &Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl<const N: usize> Sub<Simd<i64, N>> for Simd<i64, N> where
i64: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<i64, N>> for Simd<i64, N> where
i64: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl Sub<Saturating<u64>> for Saturating<u64>
impl Sub<Saturating<u64>> for Saturating<u64>
type Output = Saturating<u64>
fn sub(self, other: Saturating<u64>) -> Saturating<u64>
sourceimpl<const N: usize> Sub<Simd<u16, N>> for Simd<u16, N> where
u16: SimdElement,
LaneCount<N>: SupportedLaneCount,
impl<const N: usize> Sub<Simd<u16, N>> for Simd<u16, N> where
u16: SimdElement,
LaneCount<N>: SupportedLaneCount,
sourceimpl<'_> Sub<&'_ Saturating<u16>> for Saturating<u16>
impl<'_> Sub<&'_ Saturating<u16>> for Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
fn sub(
self,
other: &Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl<'a> Sub<Saturating<usize>> for &'a Saturating<usize>
impl<'a> Sub<Saturating<usize>> for &'a Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
fn sub(
self,
other: Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl<'_, '_> Sub<&'_ Saturating<u16>> for &'_ Saturating<u16>
impl<'_, '_> Sub<&'_ Saturating<u16>> for &'_ Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
fn sub(
self,
other: &Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl<'_, '_, T> Sub<&'_ BTreeSet<T>> for &'_ BTreeSet<T> where
T: Ord + Clone,
impl<'_, '_, T> Sub<&'_ BTreeSet<T>> for &'_ BTreeSet<T> where
T: Ord + Clone,
sourcefn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T>
fn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T>
Returns the difference of self
and rhs
as a new BTreeSet<T>
.
Examples
use std::collections::BTreeSet;
let a = BTreeSet::from([1, 2, 3]);
let b = BTreeSet::from([3, 4, 5]);
let result = &a - &b;
let result_vec: Vec<_> = result.into_iter().collect();
assert_eq!(result_vec, [1, 2]);
type Output = BTreeSet<T>
sourceimpl<'_, '_, T, S1, S2> Sub<&'_ IndexSet<T, S2>> for &'_ IndexSet<T, S1> where
T: Eq + Hash + Clone,
S1: BuildHasher + Default,
S2: BuildHasher,
impl<'_, '_, T, S1, S2> Sub<&'_ IndexSet<T, S2>> for &'_ IndexSet<T, S1> where
T: Eq + Hash + Clone,
S1: BuildHasher + Default,
S2: BuildHasher,
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S, Global>> for &'_ HashSet<T, S, Global> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S, Global>> for &'_ HashSet<T, S, Global> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
Returns the difference of self
and rhs
as a new HashSet<T, S>
.
Examples
use hashbrown::HashSet;
let a: HashSet<_> = vec![1, 2, 3].into_iter().collect();
let b: HashSet<_> = vec![3, 4, 5].into_iter().collect();
let set = &a - &b;
let mut i = 0;
let expected = [1, 2];
for x in &set {
assert!(expected.contains(x));
i += 1;
}
assert_eq!(i, expected.len());
type Output = HashSet<T, S, Global>
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S, Global>> for &'_ HashSet<T, S, Global> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
impl<'_, '_, T, S> Sub<&'_ HashSet<T, S, Global>> for &'_ HashSet<T, S, Global> where
T: Eq + Hash + Clone,
S: BuildHasher + Default,
fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
Returns the difference of self
and rhs
as a new HashSet<T, S>
.
Examples
use hashbrown::HashSet;
let a: HashSet<_> = vec![1, 2, 3].into_iter().collect();
let b: HashSet<_> = vec![3, 4, 5].into_iter().collect();
let set = &a - &b;
let mut i = 0;
let expected = [1, 2];
for x in &set {
assert!(expected.contains(x));
i += 1;
}
assert_eq!(i, expected.len());