c++容器類map

在C++標準中,STL被組織爲下面的13個頭文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。

 

 

map常用成員(關聯容器)----創建map<主鍵,主鍵對應的值>,增insert,刪erase,改查找find,然後修改second,遍歷iterator,獲取元素個數size,判空empty  

 

        map是STL的一個關聯容器,它提供一對一(第一個字段爲關鍵字每個關鍵字只能在map中出現一次,第二個字段稱爲該關鍵字的值)的數據處理能力,由於這個特性
        map內部的實現自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),這顆樹具有對數據自動排序的功能

頭文件::

            #include <iostream>

            #include <map>

            using namespace std;

 

創建map對象::

           map<int ,string>    object;                       //map<主鍵,主鍵對應的值>

注意:

           在map<key,value>類型中對key的要求:

           因爲map內部的實現採用的是一顆紅黑樹(類似平衡二叉樹),所以,它要按照key值比較大小(弱排序),所以,對key類型的唯一要求是,它必須支持<操作,至於是否支持其他的關係或相等元算,不做要求。

          例如::  我們定義了一個類作爲Key,那麼必須讓它支持<操作,否則是不可以的。

 

                                  增  insert     數組方式object[key_value] = value;

創建map的成員::

方法一、插入value_type          

         map<int,string>::value_type   value(1,"billchen");

         object.insert(value);

         也可以用   value.insert(map<int,string>::value_type(1,"billchen"));作用是一樣的。   

方法二、插入pair或make_pair數據

         map<int,string>   object;

         object.insert(pair<int,string>(1,"billchen"));

         或者

         object.insert(make_pair(1,"billchen"));                    

         /*

                     其中pair是一個模板pair<T1,T2>  pvalue(v1,v2);表示創建一個pair對象,

            v1和v2的類型是T1和T2,值是v1和v2。

                     可以取出v1和v2的值,

                     分別是pvalue.first  爲  v1

                                pvalue.second   爲   v2

         */

         /*

            其中make_pair(v1,v2);表示以v1,v2創建一個新的pair對象,類型是v1和v2的類型。

             一般用在map的insert方法中,創建臨時對象。

         */

方法三、數組方式

         map<int,string>    object;

         object[1]="billchen";         //object[key_value]=value;               (在key值對應的空間填寫數據)

 

                                                 刪  erase      clear

刪除map中的一個元素,使用erase

方法一、通過迭代器刪除         

         map<int,string>::iterator   iter = object.find(key);                    

         if(iter != object.end())

         {

                    object.erase(iter);                         

         }

方法二、通過key值刪除

        object.erase(key);                   //刪除成功,返回1,刪除失敗,返回0

刪除map中的一段,如迭代器iter_begin到iter_end的元素:

        iter_begin = object.find(key_value1);

        iter_end = object.find(key_value2);

        if(iter_begin != object.end() && iter_end != object.end())

        {

                object.erase(iter_begin,iter_end);

        }

刪除所有元素使用erase:

方法一、使用迭代器,遍歷刪除          

          map<int,string>::iterator iter=object.begin();

          while(iter!=object.end())

          {

                       object.erase(iter++);    //這樣做,是爲了防止迭代器失效。

          }

方法二、調用clear接口

         object.clear();

                                           改   (修改map中成員的值)

修改map中成員的值(迭代器):

          map<int,string>::iterator   iter = object.find(key);

          iter->second="wang";

修改map中成員的值(數組方式):

         map[key] = "wang";

例如:

#include <iostream>
#include <string>
#include <map>
using namespace std;

int main(int argc,char *argv[])
{
        int i;
        map<char,string> obj;
        map<char,string>::value_type mem1('a',"billchen");
        obj.insert(mem1);
        map<char,string>::iterator iter = obj.begin();
        while(iter != obj.end())       //修改
        {   
                iter->second="wang";
                iter++;
        }   
        iter=obj.begin();
        while(iter != obj.end())        //遍歷
        {   
                cout << iter->first << endl;
                cout << iter->second << endl;
                iter++;
        }   
        return 0;
}

                                                    查   find

查找使用find(主鍵);

       object.find(主鍵);

       返回值爲iterator(迭代器),

       if(object.find(主鍵) == object.end())

       {

                 cout << "沒有找到" <<endl;

       }

 

                                                   遍歷

遍歷方法1:    通過迭代器

         map<int,string>::iterator iter=object.begin(); 

          while(iter!=object.end())

          {

                       cout<<iter->first<<iter->second等等<<endl;

                       iter++;

         }

適當的情況下,可以使用數組的方式來進行map的遍歷。

 

                                  獲取map中成員的個數  size()

獲取map中元素的個數:

          map<int,string> obj;
          map<int,string>::value_type mem1(1,"billchen");
          map<int,string>::value_type mem2(2,"chenbaihu");
          obj.insert(mem1);
          obj.insert(mem2);
          cout << obj.size() <<endl;

 

                          判斷map是否爲空,使用empty                                                 

爲空,返回true,不爲空,返回false;

 

發佈了9 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章