Default implementation of immutable priority maps using two maps: a regular map from keys to values and a sorted map from values to sets of keys.
A generic trait for immutable priority maps.
A generic trait for immutable priority maps. Concrete classes have to provide
functionality for the abstract methods in PriorityMap
:
def get(key: A): Option[B] def iterator: Iterator[(A, B)] def +(kv: (A, B): PriorityMap[A, B] def +[B1 >: B](kv: (A, B1)): Map[A, B1] def -(key: A): PriorityMap[A, B] def rangeImpl(from: Option[B], until: Option[B]): PriorityMap[A, B] implicit def ordering: Ordering[B]
The iterator returned by iterator
should generate key/value pairs in the
order specified by the implicit ordering on values.
Concrete classes may also override valueSet
, whose default implementation
builds up a new SortedSet from the map's values.
A template trait for immutable priority maps.
A template trait for immutable priority maps.
To create a concrete priority map, you need to implement the following methods
in addition to those of MapLike
:
def +(kv: (A, B): This def rangeImpl(from: Option[B], until: Option[B]): This
The iterator returned by iterator
should generate key/value pairs in the
order specified by the implicit ordering on values.
Concrete classes may also override valueSet
, whose default implementation
builds up a new SortedSet from the map's values.
This object provides a set of operations needed to create priority maps.
This object provides a set of operations needed to create priority maps.
Provides an implementation of immutable priority maps, i.e. immutable maps that return their entries sorted by value.
Overview
Priority maps are similar to sorted maps, but while for sorted maps
iterator
returns an iterator that produces entries sorted by their keys, callingiterator
on a priority map returns an iterator that produces entries sorted by their values. Priority maps also offer severalrange
methods, which return a submap with values inside a given range.Since calling
head
on a priority map returns a key-value pair with minimal value, priority maps can also be thought of as a more versatile variant of priority queues.Usage
The easiest way to instantiate a new priority map is to use the
apply
method in the de.ummels.prioritymap.PriorityMap companion object.Since priority maps are immutable, updating a key/value pair returns a new map and does not modify the old map.
In addition to the methods available for maps, priority maps offer methods for obtaining a submap whose values lie inside a given range.