template <typename T> pure Set<T> set(void); template <typename T> pure Set<T> set(List<T> xs); template <typename T> pure bool empty(Set<T> xs); template <typename T> pure bool find(Set<T> s, const T &k); template <typename T> pure Set<T> insert(Set<T> s, const T &k); template <typename T> pure Set<T> erase(Set<T> s, const T &k); template <typename T> pure Set<T> merge(Set<T> s, Set<T> t); template <typename T> pure Set<T> intersect(Set<T> s, Set<T> t); template <typename T> pure Set<T> diff(Set<T> s, Set<T> t); template <typename T> pure size_t size(Set<T> s); template <typename T, typename A, typename F> pure A foldl(Set<T> s, const A &arg, F func); template <typename T, typename A, typename F> pure A foldr(Set<T> s, const A &arg, F func); template <typename T> pure int compare(Set<T> s, Set<T> t); template <typename T> pure String show(Set<T> s); template <typename T> pure SetItr<T> begin(Set<T> s); template <typename T> pure SetItr<T> end(Set<T> s); template <typename T> SetItr<T> &operator++(SetItr<T> &i); template <typename T> SetItr<T> &operator--(SetItr<T> &i); template <typename T> SetItr<T> &operator+(SetItr<T> &i, ssize_t offset); template <typename T> SetItr<T> &operator-(SetItr<T> &i, ssize_t offset); template <typename T> SetItr<T> &operator+=(SetItr<T> &i, ssize_t offset); template <typename T> SetItr<T> &operator-=(SetItr<T> &i, ssize_t offset); template <typename T> pure const T &operator*(SetItr<T> &i); template <typename T> pure bool verify(Set<T> s); template <typename T> pure bool operator==(const SetItr<T> &i, const SetItr<T> &j); template <typename T> pure bool operator!=(const SetItr<T> &i, const SetItr<T> &j);
template <typename T> pure Set<T> set(void)
Construct the empty set. O(1).
template <typename T> pure Set<T> set(List<T> xs)
Construct a set from a list. O(n * log(n)).
template <typename T> pure bool empty(Set<T> xs)
Test if a set is empty. O(1).
template <typename T> pure bool find(Set<T> s, const T &k)
Test if an element is a member of a set. O(log(n)).
template <typename T> pure Set<T> insert(Set<T> s, const T &k)
Set insert. O(log(n)).
template <typename T> pure Set<T> erase(Set<T> s, const T &k)
Set remove. O(log(n)).
template <typename T> pure Set<T> merge(Set<T> s, Set<T> t)
Set union (merge). O(log(n) + log(m)).
template <typename T> pure Set<T> intersect(Set<T> s, Set<T> t)
Set intersect. O(log(n) + log(m)).
template <typename T> pure Set<T> diff(Set<T> s, Set<T> t)
Set difference. O(log(n) + log(m)).
template <typename T> pure size_t size(Set<T> s)
Set size. O(n).
template <typename T, typename A, typename F> pure A foldl(Set<T> s, const A &arg, F func)
Set fold left. ([](A a, T x) -> A). O(n).
template <typename T, typename A, typename F> pure A foldr(Set<T> s, const A &arg, F func)
Set fold right. ([](A a, T x) -> A). O(n).
template <typename T> pure int compare(Set<T> s, Set<T> t)
Set compare. O(n).
template <typename T> pure String show(Set<T> s)
Set show. O(n).
template <typename T> pure SetItr<T> begin(Set<T> s)
Construct an iterator pointing to the least element of a set. O(1).
template <typename T> pure SetItr<T> end(Set<T> s)
Construct an iterator representing one past the greatest element of a set. O(1).
template <typename T> SetItr<T> &operator++(SetItr<T> &i)
Set iterator increment. O(1).
template <typename T> SetItr<T> &operator--(SetItr<T> &i)
Set iterator decrement. O(1).
template <typename T> SetItr<T> &operator+(SetItr<T> &i, ssize_t offset)
Set iterator add offset. O(1).
template <typename T> SetItr<T> &operator-(SetItr<T> &i, ssize_t offset)
Set iterator substract offset. O(1).
template <typename T> SetItr<T> &operator+=(SetItr<T> &i, ssize_t offset)
Set iterator add offset. O(1).
template <typename T> SetItr<T> &operator-=(SetItr<T> &i, ssize_t offset)
Set iterator substract offset. O(1).
template <typename T> pure const T &operator*(SetItr<T> &i)
Set iterator dereference. O(log(delta)), where delta is distance to last dereference.
template <typename T> pure bool verify(Set<T> s)
Set verify. O(n).
template <typename T> pure bool operator==(const SetItr<T> &i, const SetItr<T> &j)
Set iterator same offset. O(1).
template <typename T> pure bool operator!=(const SetItr<T> &i, const SetItr<T> &j)
Set iterator different offset. O(1).