$elem = Heap::Elem::SomeInheritor->new( [args] );
Creates a new Elem. If there is exactly one arg, the Elem's value will be set to that value. If
there is more than one arg provided, the Elem's value will be set to an anonymous hash initialized to
the provided args (which must have an even number, of course).
$elem->heap( $val ); $elem->heap;
Provides a method for use by the Heap processing routines. If a value argument is provided, it will
be saved. The new saved value is always returned. If no value argument is provided, the old saved
value is returned.
The Heap processing routines use this method to map an element into its internal structure. This is
needed to support the Heap methods that affect elements that are not are the top of the heap -
decrease_key and delete.
The Heap processing routines will ensure that this value is undef when this elem is removed from a
heap, and is not undef after it is inserted into a heap. This means that you can check whether an
element is currently contained within a heap or not. (It cannot be used to determine which heap an
element is contained in, if you have multiple heaps. Keeping that information accurate would make
the operation of merging two heaps into a single one take longer - it would have to traverse all of
the elements in the merged heap to update them; for Binomial and Fibonacci heaps that would turn an
O(1) operation into an O(n) one.)
$elem->val( $val ); $elem->val;
Provides a method to get and/or set the value of the element.
$elem1->cmp($elem2)
A routine to compare two elements. It must return a negative value if this element should go higher
on the heap than $elem2, 0 if they are equal, or a positive value if this element should go lower on
the heap than $elem2. Just as with sort, the Perl operators <=> and cmp cause the smaller value to
be returned first; similarly you can negate the meaning to reverse the order - causing the heap to
always return the largest element instead of the smallest.