unordered_map和map類似,都是存儲的key-value的值,可以通過key快速索引到value。
不同的是unordered_map不會根據key的大小進行排序,存儲時是根據key的hash值判斷元素是否相同,即unordered_map內部元素是無序的,而map中的元素是按照二叉搜索樹存儲,進行中序遍歷會得到有序遍歷。
所 以使用時map的key需要定義operator<。而unordered_map需要定義hash_value函數並且重載 operator==。但是很多系統內置的數據類型都自帶這些,那么如果是自定義類型,那么就需要自己重載operator<或者 hash_value()了。
結論:如果需要內部元素自動排序,使用map,不需要排序使用unordered_map
C++0X為什么不把unordered_map定義為hash_map呢?那是因為在新標准出現之前很多庫廠商已經暫用了hash_map這個名詞。因此為了向前兼容不得不定義新的unordered_map。
函數原型
template < class Key, // unordered_map::key_type class T, // unordered_map::mapped_type class Hash = hash<Key>, // unordered_map::hasher class Pred = equal_to<Key>, // unordered_map::key_equal class Alloc = allocator< pair<const Key,T> > // unordered_map::allocator_type >
class unordered_map;
Key表示建的類型
T表示鍵映射到的hash值的類型
Hash是一個接受一個參數且類型要與Key兼容的函數對象。返回值為T型。注意,參數是const引用, 函數是const
Pred是一個接受兩個參數且其類型與Key兼容的函數對象。返回值為BOOL型。注意,參數是const引用, 函數是const
成員函數:
Member functions
- (constructor)
- Construct unordered_map (public member function )
- (destructor)
- Destroy unordered map (public member function)
- operator=
- Assign content (public member function )
Capacity
- empty
- Test whether container is empty (public member function)
- size
- Return container size (public member function)
- max_size
- Return maximum size (public member function)
Iterators
- begin
- Return iterator to beginning (public member function)
- end
- Return iterator to end (public member function)
- cbegin
- Return const_iterator to beginning (public member function)
- cend
- Return const_iterator to end (public member function)
Element access
- operator[]
- Access element (public member function )
- at
- Access element (public member function)
Element lookup
- find
- Get iterator to element (public member function)
- count
- Count elements with a specific key (public member function )
- equal_range
- Get range of elements with specific key (public member function)
Modifiers
- emplace
- Construct and insert element (public member function )
- emplace_hint
- Construct and insert element with hint (public member function )
- insert
- Insert elements (public member function )
- erase
- Erase elements (public member function )
- clear
- Clear content (public member function )
- swap
- Swap content (public member function)
Buckets
- bucket_count
- Return number of buckets (public member function)
- max_bucket_count
- Return maximum number of buckets (public member function)
- bucket_size
- Return bucket size (public member type)
- bucket
- Locate element's bucket (public member function)
Hash policy
- load_factor
- Return load factor (public member function)
- max_load_factor
- Get or set maximum load factor (public member function )
- rehash
- Set number of buckets (public member function )
- reserve
- Request a capacity change (public member function)
Observers
- hash_function
- Get hash function (public member type)
- key_eq
- Get key equivalence predicate (public member type)
- get_allocator
- Get allocator (public member function)