Synopsis

template <class Key,
    class Ty,
    class Hash  = std::tr1::hash<Key>,
    class Pred  = std::equal_to<Key>,
    class Alloc= std::allocator<Key> >
    class unordered_map {
public:
    typedef Key key_type;    
    typedef Ty mapped_type;
    typedef std::pair<const Key, Ty> value_type;
    typedef Hash hasher;
    typedef Pred 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 iterator;
    typedef T1 const_iterator;
    typedef T2 size_type;
    typedef T3 difference_type;        
    typedef T4 local_iterator;
    typedef T5 const_local_iterator;

    unordered_map(
        const unordered_map& right);
    explicit unordered_map(
        size_type nbuckets = N0,
        const Hash& hfn = Hash(),
        const Pred& comp = Pred(),
        const Alloc& al = Alloc());
    template <class InIt>
        unordered_map(
        InIt first, InIt last,        
        size_type nbuckets = N0,
        const Hash& hfn = Hash(),
        const Pred& comp = Pred(),
        const Alloc& al = Alloc());
    
    iterator begin();
    const_iterator begin() const;
    local_iterator begin(size_type nbucket);
    const_local_iterator begin(size_type nbucket) const;

    iterator end();
    const_iterator end() 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(const Key& keyval) const;
    size_type bucket_size(size_type nbucket) const;
    
    Hash hash_function() const;
    Pred key_eq() const;
    Alloc get_allocator() const;

    float load_factor() const;
    float max_load_factor() const;
    void max_load_factor(float factor);
    void rehash(size_type nbuckets);

    Ty operator[](const Key& keyval);

    std::pair<iterator, bool> insert(const value_type& val);
    iterator insert(iterator where, const value_type& val);
    template<class InIt>
        void insert(InIt first, InIt last);

    iterator erase(iterator where);
    iterator erase(iterator first, iterator last);
    size_type erase(const Key& keyval);
    void clear();

    void swap(unordered_map& right);

    const_iterator find(const Key& keyval) const;
    size_type count(const Key& keyval) const;
    std::pair<iterator, iterator>
        equal_range(const Key& keyval);
    std::pair<const_iterator, const_iterator>
        equal_range(const Key& keyval) const;
    };