pub fn intersection_by<T, L, R, F>(
a: L,
b: R,
cmp: F,
) -> impl Iterator<Item = T>Expand description
Take the intersection of two sets represented by sorted, deduplicated iterators, using a comparator function.
Note that since this passes elements to the comparator function as &mut T, you can swap them
to override the default behaviour of returning duplicate elements from a.
See intersection().
ยงExamples
Using the comparator function to choose which iterator to take from.
use std::cmp::Ordering::{self, Equal};
use std::mem::swap;
use iter_set::intersection_by;
let mut a = [(1, vec![2]), (2, vec![])];
let mut b = [(2, vec![1]), (3, vec![])];
fn compare(l: &mut (u32, Vec<i32>), r: &mut (u32, Vec<i32>)) -> Ordering {
match Ord::cmp(&l.0, &r.0) {
Equal => {
if r.1.len() > l.1.len() {
swap(r, l);
}
Equal
}
neq => neq,
}
}
assert!(intersection_by(&mut a, &mut b, |l, r| compare(*l, *r)).eq(&[(2, vec![1])]));