Skip to content

yoavlt/sorted_set

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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]>

About

Sorted Set library for Elixir

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Elixir 100.0%