tree


template <class K, class T>
class tree : public set<T>
{
 public:
  typedef int (*keyValueCompare)(const K&,const T&);

 private:
  keyValueCompare KeyToValue;

 public:

  tree(keyValueCompare K=compare,
       keyCompare C=compare);

  tree(const tree<K,T>& Copy);

  template<class I>
  tree(I first,
       I last,
       keyValueCompare K=compare,
       keyCompare C=compare);

  tree<K,T>& operator=(const tree<K,T>& Copy);

  void* operator new(size_t s);

  void operator delete(void* p);

  operator keyValueCompare() const;

  T& operator[](const K& Key) const;

  iterator after(const K& Key) const;

  iterator afterEquals(const K& Key) const;

  iterator before(const K& Key) const;

  iterator beforeEquals(const K& Key) const;

  void erase(const K& Key);

  bool exists(const K& Key) const;

  iterator find(const K& Key) const;
};