Listing 5
// synopsis of template class multimap template <class Key, class Ty, class Pr = std::less<Key>, class Alloc = std::allocator<std::pair<const Key, Ty> > > class multimap { // ordered container holding (Key, Ty) pairs public: // NESTED TYPES typedef Key key_type; typedef Ty mapped_type; typedef Pr key_compare; typedef Alloc allocator_type; typedef std::pair<const Key, Ty> value_type; class value_compare; typedef Alloc::pointer pointer; typedef Alloc::const_pointer const_pointer; typedef Alloc::reference reference; typedef Alloc::const_reference const_reference; typedef T0 size_type; typedef T1 difference_type; typedef T2 iterator; typedef T3 const_iterator; typedef std::reverse_iterator<iterator> reverse_iterator; typedef std::reverse_iterator<const_iterator> const_reverse_iterator; // CONSTRUCTORS multimap(); explicit multimap(const Pr& pr); multimap(const Pr& pr, const Alloc& al); multimap(const multimap& right); template <class InIt> multimap(InIt first, InIt last); template <class InIt> multimap(InIt first, InIt last, const Pr& pr); template <class InIt> multimap(InIt first, InIt last, const Pr& pr, const Alloc& al); // MODIFICATION iterator insert(const value_type& val); iterator insert(iterator hint, const value_type& val); template <class InIt> void insert(InIt first, InIt last); iterator erase(iterator pos); iterator erase(iterator first, iterator last); iterator erase(cosnt Key& key); void clear(); void swap(multimap& right); // CONTAINER ITERATORS iterator begin(); const_iterator begin() const; iterator end(); const_iterator end() const; reverse_iterator rbegin(); const_reverse_iterator rbegin() const; reverse_iterator rend(); const_reverse_iterator rend() const; // ELEMENT ACCESS iterator find(const Key& key); const_iterator find(const Key& key) const; size_type count(const Key& key) const; iterator lower_bound(const Key& key); const_iterator lower_bound(const Key& key) const; iterator upper_bound(const Key& key); const_iterator upper_bound(const Key& key) const; pair<iterator, iterator> equal_range(const Key& key); pair<const_iterator, const_iterator> equal_range(const Key& key) const; // QUERIES size_type size() const; size_type max_size() const; bool empty() const; Alloc get_allocator() const; key_compare key_comp() const; value_compare value_comp() const; }; template <class Key, class Ty, class Pr, class Alloc> bool operator==( const multimap<Key, Ty, Pr, Alloc>&, const multimap<Key, Ty, Pr, Alloc>&); /* analogous template functions for !=, <, <=, >, and >= */ template <class Key, class Ty, class Pr, class Alloc> void swap( const multimap<Key, Ty, Pr, Alloc>&, const multimap<Key, Ty, Pr, Alloc>&);