關聯容器

        關聯容器支持通過鍵來高效地查找和讀取元素,放入關聯容器中的元素,按照鍵的大小來排列,c++標準庫支持兩個基本的關聯容器類型:map和set。map是鍵-值對的集合,通常可以理解爲關聯數組,使用map對象時,必須包含map頭文件。set是單純的鍵的集合,它支持map大部分操作,使用set容器時,必須包含set頭文件。關聯容器的類型包括map、set、multimap、multiset。


        pair類型:定義在utility頭文件中,是由兩個元素組成的數據結構,通常可以用在map容器中

                          pair<T1, T2> p1;                                //創建一個空的pair對象

                          pair<T1, T2> p1(v1, v2);                    //創建一個pair對象,兩個元素的值爲v1, v2

                          make_pair(v1, v2);                             //以v1, v2生成一個新的pair對象

                          p1 < p2、p1 == p2

                          p.first、p.second                                //返回first、second共有的數據成員


        map類型

                定義:

                                map<k, v> m;

                                map<k, v> m(m2);

                                map<k, v> m(b, e);

                                注:鍵類型的約束,鍵不但要有一個類型,而且還有一個相關的比較函數,默認情況下,標

                                       準庫使用鍵類型數據上的“小於”關係。                         

                map定義的類型:

                                map<k, v>::key_type                          //索引的鍵的類型

                                map<k, v>::mapped_type                  //鍵所關聯的值的類型

                                map<k, v>::value_type                       //一個pair類型,與make_pair有相同的作用

                

                添加元素:

                                使用insert成員實現

                                         m.insert(e);                                                           //返回一個pair對象

                                         m.insert(beg, end);

                                         m.insert(iter, e); 

                                使用下標操作符獲取元素,然後給獲取元素賦值             //下標操作符返回左值,如果下標所

                                                                                                                     表示的鍵不在容器中,則添加新元素

                查找元素:

                                當使用下標操作符查找不到元素時,map會自動添加該元素,所以我們不能用下標操作符進

                               行查找,c++標準庫提供了count和find兩個函數進行查找,對於map對象,count成員的返回

                               值只能是0或1,而find的返回值是一個迭代器。

                                m.count(k);

                                m.find(k);                                        //如果找不到則返回m.end()

                刪除元素:

                                m.erase(k);                                    //返回刪除元素個數

                                m.erase(p);                                    //返回void

                                m.erase(b, e);                                //返回void

                迭代遍歷:                                                    //與順序容器相同

        multimap:                                                      

                mutimap允許一個鍵對應多個實例,所以multimap不支持下標運算,它的使用方法與map基本相同,使

                用時需要引用map頭文件。

                不同的迭代方案:

                                m.lower_bound(k);                       //返回迭代器,指向鍵不小於K的第一個元素

                                m.upper_bound(k);                      //返回迭代器,指向鍵不大於K的第一個元素

                                m.equal_range(k);                       //返回迭代器的pair對象,它的first成員等價與

                                                                                      m.lower_bound(k)

        set類型

                set容器是單純的鍵的集合,它支持大部分的map操作,set不支持下標操作符,而且沒有定義

                mapped_type類型,在set容器中,value_type與key_type類型相同,並且鍵爲const類型,不

                以修改,如果某個集合需要按順序存儲,並且要保證不重複出現任何元素,可以考慮使用此類型。

                添加元素:

                               s.insert(k);                                    

                               s.insert(beg, end);                           //返回pair類型,包含一個迭代器和一個bool類型,bool

                                                                                        代表是否添加了元素

               其他操作:                                                       //同map

        multiset:                                                      

                multiset允許一個鍵對應多個實例,它的使用方法與set基本相同,使用時需要引用set頭文件


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章