map/multimap

環(huán)境:ide:Mac+clion

視頻鏈接:
https://www.bilibili.com/video/BV1Hb411Y7E5?p=5

map中所有的元素都是pair,pair中其實(shí)第一個(gè)就是key(鍵值)房午,第二個(gè)是value(實(shí)值)峡懈。

而且map 中是按照鍵值進(jìn)行排序的疏日。也稱為關(guān)聯(lián)容器彼哼。
map中不允許有重復(fù)鍵值坎穿。
multimap 允許有重復(fù)鍵值。

void printMap(const map<string,int>&m){
    for(map<string,int>::const_iterator it = m.begin();it != m.end();it++){
        cout << it->first << " " << it->second <<endl;
    }
}

//map 按照key 進(jìn)行排序。
void test(){
    map<string,int> m;
    pair<string,int> p2 = make_pair("sheik2",2);
    pair<string,int> p1 = make_pair("sheik1",1);
    m.insert(p2);
    m.insert(p1);
    printMap(m);
    map<string,int> m1(m);
    cout << "------------------"<<endl;
    printMap(m1);
    map<string,int> m2;
    m2 = m;
    cout << "------------------"<<endl;
    printMap(m2);
    
}

map大小和交換:size/empty/swap
map 的插入和刪除insert/erase/clear
map的查找和統(tǒng)計(jì):find/count .find 按照key的方式來查找露久,如果找到返回當(dāng)前的迭代器奕污,如果沒有就會(huì)返回end。

    map<string,int> m;
    pair<string,int> p2 = make_pair("sheik2",2);
    pair<string,int> p1 = make_pair("sheik1",1);
    m.insert(p1);
    m.insert(p2);
    //map<string,int>::iterator  pos = m.find(p1.first);//查找到數(shù)據(jù)sheik1 1
    map<string,int>::iterator  pos = m.find("sheik3");//沒有查到此數(shù)據(jù)
    if (pos != m.end()){
        cout << "查找到數(shù)據(jù)"<<pos->first <<" " << pos->second<<endl;
    }else{
        cout <<"沒有查到此數(shù)據(jù)" << endl;
    }
    cout << m.count("sheik1")<<endl;//1
}

map容器的排序:map 默認(rèn)排序仍然是從小到大宾肺,利用仿函數(shù),來改變它的排序規(guī)則。仿函數(shù)状共,也是重載operator() 方式。

class MyCompare{
public:
    bool operator()(const string v1,const string v2) const{
        return v1 > v2;
    }
};

void test02(){
    map<string,int,MyCompare> m;
    pair<string,int> p2 = make_pair("sheik2",2);
    pair<string,int> p1 = make_pair("sheik1",1);
    m.insert(p1);
    m.insert(p2);
    for (map<string,int,MyCompare>::iterator it=m.begin();it != m.end();it ++){
        cout << it->first << " " << it->second << endl;
    }
//    sheik2 2
//    sheik1 1
}

學(xué)習(xí)案例:

10個(gè)人谁帕,分別分配到美術(shù)/研發(fā)/策劃三個(gè)部門峡继。分別打印出三個(gè)部門的人力情況和薪資情況。

#define  CEHUA 0
#define  YANFA 1
#define  MEISHU 2

class Person {
public:
    string m_Name;
    int m_Salary;
};

void createPerson(vector<Person> &v) {

    const string nameSeed = "ABCDEFGHIJ";
    for (int i = 0; i < 10; i++) {
        Person person;
        person.m_Name = "員工";
        person.m_Name += nameSeed[i];
        person.m_Salary = rand() % 10001 + 10000;//10000 -20000
        v.push_back(person);//把創(chuàng)建的同學(xué)放到vector容器中匈挖。
    }
}

void setGroupByPerson(vector<Person> &v, multimap<int, Person> &m) {
    for (vector<Person>::iterator it = v.begin(); it != v.end(); it++) {
        //這里開始分部門碾牌。
        int depId = rand() % 3;// 部門分為 0 1 2
        m.insert(make_pair(depId, *it));//把每個(gè)人進(jìn)行分配好部門后,放到multimap 容器中儡循。
    }
}

void showPersonByDepId(const multimap<int, Person> &m) {
    multimap<int, Person>::const_iterator pos = m.find(CEHUA);//通過key 來查找人
    int count = m.count(CEHUA);
    int index = 0;
    cout << "策劃部門:"<<endl;
    for (;pos != m.end() && index < count ;pos++,index++){
        cout << "員工姓名:"<<pos->second.m_Name << " 薪資:"<<pos->second.m_Salary<<endl;
    }

    pos = m.find(YANFA);//通過key 來查找人
    count = m.count(YANFA);
    index = 0;
    cout << "研發(fā)部門:"<<endl;
    for (;pos != m.end() && index < count ;pos++,index++){
        cout << "員工姓名:"<<pos->second.m_Name << " 薪資:"<<pos->second.m_Salary<<endl;
    }
    pos = m.find(MEISHU);//通過key 來查找人
    count = m.count(MEISHU);
    index = 0;
    cout << "美術(shù)部門:"<<endl;
    for (;pos != m.end() && index < count ;pos++,index++){
        cout << "員工姓名:"<<pos->second.m_Name << " 薪資:"<<pos->second.m_Salary<<endl;
    }
//    策劃部門:
//    員工姓名:員工D 薪資:19895
//    員工姓名:員工I 薪資:13224
//    研發(fā)部門:
//    員工姓名:員工A 薪資:15412
//    員工姓名:員工F 薪資:12907
//    員工姓名:員工H 薪資:14123
//    美術(shù)部門:
//    員工姓名:員工B 薪資:11630
//    員工姓名:員工C 薪資:11972
//    員工姓名:員工E 薪資:16413
//    員工姓名:員工G 薪資:17446
//    員工姓名:員工J 薪資:14929

}


int main() {
//    test02();
    srand((unsigned int) time(NULL));
    vector<Person> v;//創(chuàng)建10個(gè)人舶吗,放到vector容器中。
    createPerson(v);
    multimap<int, Person> m;//這里分組后择膝,把數(shù)據(jù)放到multimap中誓琼。
    setGroupByPerson(v, m);
    showPersonByDepId(m);
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腹侣,更是在濱河造成了極大的恐慌呵扛,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筐带,死亡現(xiàn)場(chǎng)離奇詭異今穿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)伦籍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蓝晒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人帖鸦,你說我怎么就攤上這事芝薇。” “怎么了作儿?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵洛二,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我攻锰,道長(zhǎng)晾嘶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任娶吞,我火速辦了婚禮垒迂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妒蛇。我一直安慰自己机断,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布绣夺。 她就那樣靜靜地躺著吏奸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪陶耍。 梳的紋絲不亂的頭發(fā)上奋蔚,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音物臂,去河邊找鬼旺拉。 笑死产上,一個(gè)胖子當(dāng)著我的面吹牛棵磷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晋涣,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼仪媒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起算吩,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤留凭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后偎巢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窍霞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了钱磅。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片续搀。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖牵咙,靈堂內(nèi)的尸體忽然破棺而出洁桌,到底是詐尸還是另有隱情,我是刑警寧澤吠谢,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站罢吃,受9級(jí)特大地震影響尿招,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吁伺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一割去、第九天 我趴在偏房一處隱蔽的房頂上張望呻逆。 院中可真熱鬧咖城,春花似錦切平、人聲如沸悴品。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至壤靶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工言疗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人噪奄。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓死姚,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親勤篮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子知允,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

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