C++11中新特性之:unordered_map


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

 
        

Capacity

 
        

Iterators

 
        

Element access

 
         
         
        

Element lookup

 
        

Modifiers

 
        

Buckets

 
        

Hash policy

 
        

Observers
















免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM