Struct ddo::CompareSubProblem
source · pub struct CompareSubProblem<X: SubProblemRanking>(/* private fields */);
Expand description
This is a thin wrapper to convert a SubProblemRanking into a Compare
object as is sometimes required (e.g. to configure the order in a binary heap)
This struct has no behavior of its own: it simply delegates to the underlying implementation.
§Example
// Assuming the existence of a simple KnapsackState type
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
struct KnapsackState {
depth: usize,
capacity: usize
}
// One can define a simple StateRanking to compare these states
struct KPRanking;
impl StateRanking for KPRanking {
type State = KnapsackState;
fn compare(&self, a: &Self::State, b: &Self::State) -> std::cmp::Ordering {
a.capacity.cmp(&b.capacity)
}
}
// However, if you were in need to create a heap capable of ordering
// the sub-problems with your custom state ranking, you would need to use an
// object that implements the `Compare` trait. This is what `CompareSubProblem`
// is used for: it provides a convenient zero sized adapter for that
// purpose.
// This allows to compare two sub-problems, ordering them in best first order
let comparator = CompareSubProblem::new(MaxUB::new(&KPRanking));
// And that comparator can in turn be used to parameterize the behavior
// of a heap (for instance).
let heap = BinaryHeap::from_vec_cmp(vec![], comparator);
Implementations§
source§impl<X: SubProblemRanking> CompareSubProblem<X>
impl<X: SubProblemRanking> CompareSubProblem<X>
Trait Implementations§
source§impl<X: Clone + SubProblemRanking> Clone for CompareSubProblem<X>
impl<X: Clone + SubProblemRanking> Clone for CompareSubProblem<X>
source§fn clone(&self) -> CompareSubProblem<X>
fn clone(&self) -> CompareSubProblem<X>
Returns a copy of the value. Read more
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moresource§impl<X: SubProblemRanking> Compare<SubProblem<<X as SubProblemRanking>::State>> for CompareSubProblem<X>
impl<X: SubProblemRanking> Compare<SubProblem<<X as SubProblemRanking>::State>> for CompareSubProblem<X>
source§fn compare(
&self,
l: &SubProblem<X::State>,
r: &SubProblem<X::State>
) -> Ordering
fn compare( &self, l: &SubProblem<X::State>, r: &SubProblem<X::State> ) -> Ordering
Compares two values, returning
Less
, Equal
, or Greater
if l
is less
than, equal to, or greater than r
, respectively.source§fn borrowing(self) -> Borrowing<Self, L, R>where
Self: Sized,
fn borrowing(self) -> Borrowing<Self, L, R>where
Self: Sized,
Borrows the comparator’s parameters before comparing them. Read more
source§fn rev(self) -> Rev<Self>where
Self: Sized,
fn rev(self) -> Rev<Self>where
Self: Sized,
Reverses the ordering of the comparator. Read more
source§impl<X: Debug + SubProblemRanking> Debug for CompareSubProblem<X>
impl<X: Debug + SubProblemRanking> Debug for CompareSubProblem<X>
impl<X: Copy + SubProblemRanking> Copy for CompareSubProblem<X>
Auto Trait Implementations§
impl<X> RefUnwindSafe for CompareSubProblem<X>where
X: RefUnwindSafe,
impl<X> Send for CompareSubProblem<X>where
X: Send,
impl<X> Sync for CompareSubProblem<X>where
X: Sync,
impl<X> Unpin for CompareSubProblem<X>where
X: Unpin,
impl<X> UnwindSafe for CompareSubProblem<X>where
X: UnwindSafe,
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more