
Data::PrioQ::SkewBinomial - A functional priority queue based on skew binomial trees

use aliased 'Data::PrioQ::SkewBinomial' => 'PQ';
my $pq = PQ->empty;
$pq = $pq->insert(1, "foo")->insert(3, "baz")->insert(2, "bar");
until ($pq->is_empty) {
($pq, my ($priority, $data)) = $pq->shift_min;
print "$priority: $data\n";
}

This module provides a purely functional priority queue. "Purely functional" means no method ever modifies a queue; instead they all return a new modified object. There is no real constructor either because there's no need for one: if the empty queue is never modified, you can just reuse it.
The following methods are available:
O(1). Returns the empty queue.
O(1). Tests whether a priority queue is empty. Returns a boolean value.
O(1). Returns a new queue containing $item inserted into $pq with a priority level of $priority. $priority must be a number.
O(1). Returns a new queue containing all elements of $pq and $pq2.
O(1). Finds the item with the lowest priority value in $pq. Returns ($priority, $item) in list context and $item in scalar context. If $pq is empty, returns the empty list/undef.
O(log n). Finds and removes the item with the lowest priority value in $pq. Returns ($pq_, $priority, $item) in list context and $pq_ in scalar context, where $pq_ is a priority queue containing the remaining elements. If $pq is empty, returns ($pq, undef, undef)/$pq in list/scalar context, respectively.

Lukas Mai, <l.mai at web.de>

Please report any bugs or feature requests to bug-data-prioq-skewbinomial at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Data-PrioQ-SkewBinomial. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

You can find documentation for this module with the perldoc command.
perldoc Data::PrioQ::SkewBinomial
You can also look for information at:
http://rt.cpan.org/NoAuth/Bugs.html?Dist=Data-PrioQ-SkewBinomial

The code in this module is based on: Chris Okasaki, Purely Functional Data Structures.

Copyright 2008 Lukas Mai, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.