Skip to content
Sorted Set library for Elixir
Elixir
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
config
lib
test
.gitignore
.travis.yml
LICENSE
README.md
mix.exs
mix.lock

README.md

SortedSet

Hex.pm Travis

A sorted set library for Elixir. Implements the Set protocol.

Installation

Add the following to deps section of your mix.exs: {:sorted_set, "~> 1.0"}

and then mix deps.get. That's it!

Generate the documentation with mix docs.

About

Sorted sets are backed by a red-black tree, providing lookup in O(log(n)). Size is tracked automatically, resulting in O(1) performance.

Basic Usage

SortedSet implements the Set behaviour, Enumerable, and Collectable.

SortedSet.new()
|> Set.put(5)
|> Set.put(1)
|> Set.put(3)
|> Enum.reduce([], fn (element, acc) -> [element*2|acc] end)
|> Enum.reverse
# => [2, 6, 10]

Custom Comparison

Sorted Set can also take a custom :comparator function to determine ordering. The function should accept two terms and

  • return 0 if they are considered equal
  • return -1 if the first is considered less than or before the second
  • return 1 if the first is considered greater than or after the second

This function is passed on to the underlying red-black tree implementation implemetation. Otherwise, the default Erlang term comparison is used (with an extra bit to handle edgecases — see note in RedBlackTree README.)

SortedSet.new([:a, :b, :c], comparator: fn (term1, term2) ->
   RedBlackTree.compare_terms(term1, term2) * -1
 end)
# => #SortedSet<[:c, :b, :a]>
Something went wrong with that request. Please try again.