set


template <class t, class less = core::less<t>>
 struct set
{
  typedef set_iterator<t> iterator;

  set();

  set(std::initializer_list l);

  set(const set& copy);

  set(const set& A, const set& B, long long operation);

  template<class I>
  set(I first,I last);

  ~set();

  set& operator=(const set& copy);

  set& operator<<(const t& element);

  set& operator>>(const t& element);

  bool operator[](const t& element) const;

  iterator after(const t& element) const;

  iterator after_equals(const t& element) const;

  iterator before(const t& element) const;

  iterator before_equals(const t& element) const;

  t& back();

  const t& back() const;

  iterator begin() const;

  bool contains(const t& element) const;

  long long depth() const; 

  iterator end() const;

  void erase();

  void erase(const t& element);

  void erase(iterator i);

  iterator find(const t& element) const;

  t& front();

  const t& front() const;

  iterator insert(const t& element);

  iterator last() const;

  long long length() const;
};

template<class t>
inline set<t,less> operator|(const set<t,less>& a,const set<t,less>& b);

template<class t>
inline set<t,less> operator&(const set<t,less>& a,const set<t,less>& b);

template<class t>
inline set<t,less> operator^(const set<t,less>& a,const set<t,less>& b);

template<class t>
inline set<t,less> operator-(const set<t,less>& a,const set<t,less>& b);

template<class t>
inline bool operator==(const set<t,less>& a,const set<t,less>& b);

template<class t>
inline bool operator!=(const set<t,less>& a,const set<t,less>& b);

template<class t>
inline bool operator<(const set<t,less>& a,const set<t,less>& b);