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
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,
sourcepub fn sub(self, rhs: &HashSet<T, S>) -> HashSet<T, S>
pub 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>
1.8.0 · sourceimpl Sub<Duration> for SystemTime
impl Sub<Duration> for SystemTime
type Output = SystemTime
pub fn sub(self, dur: Duration) -> SystemTime
1.8.0 · sourceimpl Sub<Instant> for Instant
impl Sub<Instant> for Instant
sourcepub fn sub(self, other: Instant) -> Duration
pub 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
sourceimpl Sub<&'_ Saturating<u16>> for &'_ Saturating<u16>
impl Sub<&'_ Saturating<u16>> for &'_ Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
pub fn sub(
self,
other: &Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
sourceimpl Sub<Saturating<i16>> for Saturating<i16>
impl Sub<Saturating<i16>> for Saturating<i16>
type Output = Saturating<i16>
pub fn sub(self, other: Saturating<i16>) -> Saturating<i16>
sourceimpl Sub<&'_ Saturating<u64>> for Saturating<u64>
impl Sub<&'_ Saturating<u64>> for Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
pub fn sub(
self,
other: &Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl Sub<&'_ Saturating<usize>> for &'_ Saturating<usize>
impl Sub<&'_ Saturating<usize>> for &'_ Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
pub fn sub(
self,
other: &Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::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<'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
pub fn sub(
self,
other: Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::Output
sourceimpl Sub<&'_ Saturating<u128>> for Saturating<u128>
impl Sub<&'_ Saturating<u128>> for Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
pub fn sub(
self,
other: &Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::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
pub fn sub(
self,
other: Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl Sub<&'_ Saturating<i128>> for &'_ Saturating<i128>
impl Sub<&'_ Saturating<i128>> for &'_ Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
pub fn sub(
self,
other: &Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::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<'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
pub fn sub(
self,
other: Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::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
pub fn sub(
self,
other: Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::Output
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<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 Sub<Saturating<u32>> for Saturating<u32>
impl Sub<Saturating<u32>> for Saturating<u32>
type Output = Saturating<u32>
pub fn sub(self, other: Saturating<u32>) -> Saturating<u32>
sourceimpl Sub<&'_ Saturating<u32>> for Saturating<u32>
impl Sub<&'_ Saturating<u32>> for Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
pub fn sub(
self,
other: &Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
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<i128>> for Saturating<i128>
impl Sub<Saturating<i128>> for Saturating<i128>
type Output = Saturating<i128>
pub fn sub(self, other: Saturating<i128>) -> Saturating<i128>
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
pub fn sub(
self,
other: Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
sourceimpl Sub<&'_ Saturating<u128>> for &'_ Saturating<u128>
impl Sub<&'_ Saturating<u128>> for &'_ Saturating<u128>
type Output = <Saturating<u128> as Sub<Saturating<u128>>>::Output
pub fn sub(
self,
other: &Saturating<u128>
) -> <Saturating<u128> as Sub<Saturating<u128>>>::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<'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
pub fn sub(
self,
other: Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::Output
sourceimpl Sub<&'_ Saturating<i64>> for &'_ Saturating<i64>
impl Sub<&'_ Saturating<i64>> for &'_ Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
pub fn sub(
self,
other: &Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::Output
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 Sub<&'_ Saturating<i16>> for &'_ Saturating<i16>
impl Sub<&'_ Saturating<i16>> for &'_ Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
pub fn sub(
self,
other: &Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl Sub<&'_ Saturating<i32>> for &'_ Saturating<i32>
impl Sub<&'_ Saturating<i32>> for &'_ Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
pub fn sub(
self,
other: &Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl Sub<Saturating<u64>> for Saturating<u64>
impl Sub<Saturating<u64>> for Saturating<u64>
type Output = Saturating<u64>
pub fn sub(self, other: Saturating<u64>) -> Saturating<u64>
sourceimpl Sub<&'_ Saturating<u8>> for &'_ Saturating<u8>
impl Sub<&'_ Saturating<u8>> for &'_ Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
pub fn sub(
self,
other: &Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl Sub<&'_ Saturating<i8>> for &'_ Saturating<i8>
impl Sub<&'_ Saturating<i8>> for &'_ Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
pub fn sub(
self,
other: &Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl Sub<Saturating<u16>> for Saturating<u16>
impl Sub<Saturating<u16>> for Saturating<u16>
type Output = Saturating<u16>
pub fn sub(self, other: Saturating<u16>) -> Saturating<u16>
sourceimpl Sub<Saturating<i32>> for Saturating<i32>
impl Sub<Saturating<i32>> for Saturating<i32>
type Output = Saturating<i32>
pub fn sub(self, other: Saturating<i32>) -> Saturating<i32>
sourceimpl Sub<Saturating<u128>> for Saturating<u128>
impl Sub<Saturating<u128>> for Saturating<u128>
type Output = Saturating<u128>
pub fn sub(self, other: Saturating<u128>) -> Saturating<u128>
sourceimpl Sub<&'_ Saturating<u64>> for &'_ Saturating<u64>
impl Sub<&'_ Saturating<u64>> for &'_ Saturating<u64>
type Output = <Saturating<u64> as Sub<Saturating<u64>>>::Output
pub fn sub(
self,
other: &Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::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<'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
pub fn sub(
self,
other: Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl Sub<&'_ Saturating<i8>> for Saturating<i8>
impl Sub<&'_ Saturating<i8>> for Saturating<i8>
type Output = <Saturating<i8> as Sub<Saturating<i8>>>::Output
pub fn sub(
self,
other: &Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
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<i64>> for Saturating<i64>
impl Sub<Saturating<i64>> for Saturating<i64>
type Output = Saturating<i64>
pub fn sub(self, other: Saturating<i64>) -> Saturating<i64>
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
pub fn sub(
self,
other: Saturating<i8>
) -> <Saturating<i8> as Sub<Saturating<i8>>>::Output
sourceimpl Sub<Saturating<isize>> for Saturating<isize>
impl Sub<Saturating<isize>> for Saturating<isize>
type Output = Saturating<isize>
pub fn sub(self, other: Saturating<isize>) -> Saturating<isize>
sourceimpl Sub<&'_ Saturating<u32>> for &'_ Saturating<u32>
impl Sub<&'_ Saturating<u32>> for &'_ Saturating<u32>
type Output = <Saturating<u32> as Sub<Saturating<u32>>>::Output
pub fn sub(
self,
other: &Saturating<u32>
) -> <Saturating<u32> as Sub<Saturating<u32>>>::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<'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
pub fn sub(
self,
other: Saturating<u64>
) -> <Saturating<u64> as Sub<Saturating<u64>>>::Output
sourceimpl Sub<Saturating<u8>> for Saturating<u8>
impl Sub<Saturating<u8>> for Saturating<u8>
type Output = Saturating<u8>
pub fn sub(self, other: Saturating<u8>) -> Saturating<u8>
sourceimpl Sub<&'_ Saturating<usize>> for Saturating<usize>
impl Sub<&'_ Saturating<usize>> for Saturating<usize>
type Output = <Saturating<usize> as Sub<Saturating<usize>>>::Output
pub fn sub(
self,
other: &Saturating<usize>
) -> <Saturating<usize> as Sub<Saturating<usize>>>::Output
sourceimpl Sub<Saturating<usize>> for Saturating<usize>
impl Sub<Saturating<usize>> for Saturating<usize>
type Output = Saturating<usize>
pub fn sub(self, other: Saturating<usize>) -> Saturating<usize>
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
pub fn sub(
self,
other: Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::Output
sourceimpl Sub<&'_ Saturating<u8>> for Saturating<u8>
impl Sub<&'_ Saturating<u8>> for Saturating<u8>
type Output = <Saturating<u8> as Sub<Saturating<u8>>>::Output
pub fn sub(
self,
other: &Saturating<u8>
) -> <Saturating<u8> as Sub<Saturating<u8>>>::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<i64>> for Saturating<i64>
impl Sub<&'_ Saturating<i64>> for Saturating<i64>
type Output = <Saturating<i64> as Sub<Saturating<i64>>>::Output
pub fn sub(
self,
other: &Saturating<i64>
) -> <Saturating<i64> as Sub<Saturating<i64>>>::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
pub fn sub(
self,
other: Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::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
pub fn sub(
self,
other: Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl Sub<&'_ Saturating<u16>> for Saturating<u16>
impl Sub<&'_ Saturating<u16>> for Saturating<u16>
type Output = <Saturating<u16> as Sub<Saturating<u16>>>::Output
pub fn sub(
self,
other: &Saturating<u16>
) -> <Saturating<u16> as Sub<Saturating<u16>>>::Output
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<i32>> for Saturating<i32>
impl Sub<&'_ Saturating<i32>> for Saturating<i32>
type Output = <Saturating<i32> as Sub<Saturating<i32>>>::Output
pub fn sub(
self,
other: &Saturating<i32>
) -> <Saturating<i32> as Sub<Saturating<i32>>>::Output
sourceimpl Sub<&'_ Saturating<isize>> for &'_ Saturating<isize>
impl Sub<&'_ Saturating<isize>> for &'_ Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
pub fn sub(
self,
other: &Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::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<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<i16>> for Saturating<i16>
impl Sub<&'_ Saturating<i16>> for Saturating<i16>
type Output = <Saturating<i16> as Sub<Saturating<i16>>>::Output
pub fn sub(
self,
other: &Saturating<i16>
) -> <Saturating<i16> as Sub<Saturating<i16>>>::Output
sourceimpl Sub<&'_ Saturating<isize>> for Saturating<isize>
impl Sub<&'_ Saturating<isize>> for Saturating<isize>
type Output = <Saturating<isize> as Sub<Saturating<isize>>>::Output
pub fn sub(
self,
other: &Saturating<isize>
) -> <Saturating<isize> as Sub<Saturating<isize>>>::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<i8>> for Saturating<i8>
impl Sub<Saturating<i8>> for Saturating<i8>
type Output = Saturating<i8>
pub fn sub(self, other: Saturating<i8>) -> Saturating<i8>
sourceimpl Sub<&'_ Saturating<i128>> for Saturating<i128>
impl Sub<&'_ Saturating<i128>> for Saturating<i128>
type Output = <Saturating<i128> as Sub<Saturating<i128>>>::Output
pub fn sub(
self,
other: &Saturating<i128>
) -> <Saturating<i128> as Sub<Saturating<i128>>>::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,
sourcepub fn sub(self, rhs: &BTreeSet<T>) -> BTreeSet<T>
pub 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,
pub fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
pub 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,
pub fn sub(self, rhs: &HashSet<T, S, Global>) -> HashSet<T, S, Global>
pub 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());