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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容