multiset


template<class T>
class multiset : public Semaphore
{
 public:

 // *** typedefs ***

  typedef int (*keyCompare)(const T&,const T&);

  // *** iterators ***

  typedef setIterator<T> iterator;

  typedef constSetIterator<T> const_iterator;

  typedef setAdd< multiset<T> > output_iterator;

  // *** Constructors, Destructor, Operators ***

  multiset(keyCompare C=compare);

  multiset(const multiset<T>& Copy);

  template<class I>
  multiset(I first,I last,keyCompare C=compare);

  ~multiset();

  multiset<T>& operator=(const multiset<T>& Copy);

  void* operator new(size_t s);

  void operator delete(void* p);

  operator keyCompare() const;

  multiset<T>& operator<<(const T& Element);

  // *** Methods ***

  iterator after(const T& Element) const;

  iterator afterEquals(const T& Element) const;

  iterator before(const T& Element) const;

  iterator beforeEquals(const T& Element) const;

  iterator begin();

  const_iterator begin() const;

  Unsigned depth() const; 

  iterator end();

  const_iterator end() const;

  void erase();

  Unsigned erase(const T& Key);

  void erase(iterator Item);

  bool exists(const T& Element) const;

  iterator find(const T& Key, Unsigned Index) const;

  list<T> find(const T& Key) const;

  iterator insert(const T& Element);

  iterator insertFront(const T& Element);

  iterator insertWithHint(const T& Element, iterator Hint);

  iterator insertFrontWithHint(const T& Element, iterator Hint);

  iterator last();

  const_iterator last() const;

  Unsigned length() const;

  Unsigned length(const T& Key) const;

  Void range(const T& Element,
             iterator& First,
             iterator& Last) const;
};