STL之map詳解

Map是STL的一個關(guān)聯(lián)容器,它提供一對一(其中第一個可以稱為關(guān)鍵字,每個關(guān)鍵字只能在map中出現(xiàn)一次丹拯,第二個可能稱為該關(guān)鍵字的值)的數(shù)據(jù) 處理能力祈争,由于這個特性斤程,它完成有可能在我們處理一對一數(shù)據(jù)的時候,在編程上提供快速通道菩混。這里說下map內(nèi)部數(shù)據(jù)的組織忿墅,map內(nèi)部自建一顆紅黑樹(一 種非嚴(yán)格意義上的平衡二叉樹),這顆樹具有對數(shù)據(jù)自動排序的功能沮峡,所以在map內(nèi)部所有的數(shù)據(jù)都是有序的疚脐,后邊我們會見識到有序的好處。

  1. map是一類關(guān)聯(lián)式容器邢疙。它的特點是增加和刪除節(jié)點對迭代器的影響很小棍弄,除了那個操作節(jié)點,對其他的節(jié)點都沒有什么影響疟游。對于迭代器來說呼畸,可以修改實值,而不能修改key颁虐。
  2. map的功能
    自動建立Key - value的對應(yīng)蛮原。key 和 value可以是任意你需要的類型。
    根據(jù)key值快速查找記錄另绩,查找的復(fù)雜度基本是Log(N)儒陨,如果有1000個記錄,最多查找10次板熊,1,000,000個記錄框全,最多查找20次。
    快速插入Key -Value 記錄干签。
    快速刪除記錄
    根據(jù)Key 修改value記錄津辩。
    遍歷所有記錄。
  3. 使用map
    使用map得包含map類所在的頭文件
    #include <map> //注意,STL頭文件沒有擴展名.h
    map對象是模板類喘沿,需要關(guān)鍵字和存儲對象兩個模板參數(shù):
    std:map<int,string> personnel;
    這樣就定義了一個用int作為索引,并擁有相關(guān)聯(lián)的指向string的指針.
    為了使用方便闸度,可以對模板類進(jìn)行一下類型定義,
    typedef map<int,CString> UDT_MAP_INT_CSTRING;
    UDT_MAP_INT_CSTRING enumMap;
  4. map應(yīng)用實例
#include <map>  
#include <string>  
#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;  

//map three method
map<int,string> mapstr;

void inA()
{
    mapstr.clear();
    mapstr.insert(pair<int,string>(1,"student_one"));
    mapstr.insert(pair<int,string>(2,"student_two"));
    mapstr.insert(pair<int,string>(3,"student_three"));
}

void inB()
{
    mapstr.clear();
    mapstr.insert(map<int,string>::value_type(1,"student_one"));
    mapstr.insert(map<int,string>::value_type(2,"student_two"));
    pair<map<int,string>::iterator, bool> rt = mapstr.insert(map<int,string>::value_type(3,"student_three"));
    if (rt.second == true)
    {
        cout << "INSERT SUCCESSFUL" <<endl;
    }
    else
    {
        cout << "INSERT FAIL" <<endl;
    }

}

void inC()
{
    mapstr.clear();
    mapstr[1] = "student_one";
    mapstr[2] = "student_two";
    mapstr[3] = "student_three";
}

void outA()
{
    map<int, string>::iterator iter;  
    for (iter = mapstr.begin(); iter != mapstr.end(); iter++)
    {
        cout << iter->first << "---" <<iter->second<<endl;
    }
}

void outB()
{
    map<int, string>::reverse_iterator iter;  
    for(iter = mapstr.rbegin(); iter != mapstr.rend(); iter++)  
    {
        cout<<iter->first<<"  "<<iter->second<<endl;  
    }
}

void outC()
{
    int nSize = mapstr.size();  
    for(int i = 1;i<=nSize;i++)
    {
        cout << mapstr[i] <<endl;
    }
}

void searchA()
{
    map<int,string>::iterator iter = mapstr.find(1);
    if (iter != mapstr.end())
    {
        cout << iter->second <<endl;
    }
}


void delA()
{
    map<int, string>::iterator iter = mapstr.find(1);
    map<int, string>::iterator  a = mapstr.erase(iter);
}

void delB()
{
    int b = mapstr.erase(2);
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蚜印,一起剝皮案震驚了整個濱河市莺禁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窄赋,老刑警劉巖哟冬,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異忆绰,居然都是意外死亡浩峡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門错敢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來翰灾,“玉大人,你說我怎么就攤上這事稚茅≈交矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵亚享,是天一觀的道長咽块。 經(jīng)常有香客問我,道長虹蒋,這世上最難降的妖魔是什么糜芳? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮魄衅,結(jié)果婚禮上峭竣,老公的妹妹穿的比我還像新娘。我一直安慰自己晃虫,他們只是感情好皆撩,可當(dāng)我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哲银,像睡著了一般扛吞。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上荆责,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天滥比,我揣著相機與錄音,去河邊找鬼做院。 笑死盲泛,一個胖子當(dāng)著我的面吹牛濒持,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寺滚,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼柑营,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了村视?” 一聲冷哼從身側(cè)響起官套,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蚁孔,沒想到半個月后奶赔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡勒虾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年纺阔,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片修然。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖质况,靈堂內(nèi)的尸體忽然破棺而出愕宋,到底是詐尸還是另有隱情,我是刑警寧澤结榄,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布中贝,位于F島的核電站,受9級特大地震影響臼朗,放射性物質(zhì)發(fā)生泄漏邻寿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一视哑、第九天 我趴在偏房一處隱蔽的房頂上張望绣否。 院中可真熱鬧,春花似錦挡毅、人聲如沸蒜撮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽段磨。三九已至,卻和暖如春耗绿,著一層夾襖步出監(jiān)牢的瞬間苹支,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工误阻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留债蜜,地道東北人晴埂。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像策幼,于是被迫代替她去往敵國和親邑时。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容