Listing 6
// synopsis of template class unordered_multimap
template <class Key, class Ty,
class Hash = std::tr1::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<Key> >
class unordered_multimap { // unordered container holding (Key, Ty) pairs
public:
// NESTED TYPES
typedef Key key_type;
typedef Ty mapped_type;
typedef std::pair<const Key, Ty> value_type;
typedef Hash hasher;
typedef Pr key_equal;
typedef Alloc allocator_type;
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 T4 local_iterator;
typedef T5 const_local_iterator;
// CONSTRUCTORS
unordered_multimap(size_type nbuckets = N0,
const Hash& hfn = Hash(),
const Pred& pr = Pred(),
const Alloc& al = Alloc());
template <class InIt>
unordered_multimap(InIt first, InIt last,
size_type nbuckets = N0,
const Hash& hfn = Hash(),
const Pred& pr = Pred(),
const Alloc& al = Alloc());
unordered_multimap(const unordered_multimap& right);
// MODIFICATION
iterator insert(const value_type& val);
iterator insert(iterator pos, const value_type& val);
template <class InIt>
void insert(InIt first, InIt last);
iterator erase(iterator pos);
iterator erase(iterator first, iterator last);
size_type erase(const key_type& key);
void clar();
void swap(unordered_multimap& right);
// CONTAINER ITERATORS
iterator begin();
const_iterator begin() const;
iterator end();
const_iterator end() const;
// ELEMENT ACCESS
const_iterator find(const key_type& key) const;
size_type count(const key_type& key) const;
std::pair<iterator, iterator>
equal_range(const key_type& key);
std::pair<const_iterator, const_iterator>
equal_range(const key_type& key) const;
// QUERIES
size_type size() const;
size_type max_size() const;
bool empty() const;
allocator_type get_allocator() const;
key_type key_eq() const;
hasher hash_function() const;
// TUNING
local_iterator begin(size_type nbucket);
const_local_iterator begin(size_type nbucket) const;
local_iterator end(size_type nbucket);
const_local_iterator end(size_type nbucket) const;
size_type bucket_count() const;
size_type max_bucket_count() const;
size_type bucket_size(size_type nbucket) const;
size_type bucket(const key_type& key) const;
float load_factor() const;
float max_load_factor() const;
float max_load_factor(float f);
void rehash(size_type nbuckets);
};