亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > STL教程(十):C++ STL常用容器之map

STL教程(十):C++ STL常用容器之map

來源:千鋒教育
發(fā)布人:syq
時(shí)間: 2022-06-22 17:10:16 1655889016

  1、map/multimap容器的基本概念

  Map的特性是,所有元素都會(huì)根據(jù)元素的鍵值自動(dòng)排序。Map所有的元素都是pair,同時(shí)擁有實(shí)值和鍵值,pair的第一元素被視為鍵值,第二元素被視為實(shí)值,map不允許兩個(gè)元素有相同的鍵值。 我們可以通過map的迭代器改變map的鍵值嗎?答案是不行,因?yàn)閙ap的鍵值關(guān)系到map元素的排列規(guī)則,任意改變map鍵值將會(huì)嚴(yán)重破壞map組織。如果想要修改元素的實(shí)值,那么是可以的。 Map和list擁有相同的某些性質(zhì),當(dāng)對(duì)它的容器元素進(jìn)行新增操作或者刪除操作時(shí),操作之前的所有迭代器,在操作完成之后依然有效,當(dāng)然被刪除的那個(gè)元素的迭代器必然是個(gè)例外。 Multimap和map的操作類似,唯一區(qū)別multimap鍵值可重復(fù)。 Map和multimap都是以紅黑樹為底層實(shí)現(xiàn)機(jī)制。

  2、map/multimap容器常用API

  2.1構(gòu)造函數(shù)

map<T1, T2> mapTT;//map默認(rèn)構(gòu)造函數(shù): map(const map &mp);//拷貝構(gòu)造函數(shù)

  2.2賦值操作函數(shù)

map& operator=(const map &mp);//重載等號(hào)操作符 swap(mp);//交換兩個(gè)集合容器

  2.3大小操作函數(shù)

size();//返回容器中元素的數(shù)目 empty();//判斷容器是否為空

  2.4插入數(shù)據(jù)元素操作

map.insert(...); //往容器插入元素,返回pair<iterator,bool>

map<int, string> mapStu;

// 第一種 通過pair的方式插入對(duì)象

mapStu.insert(pair<int, string>(3, "小張"));

// 第二種 通過pair的方式插入對(duì)象

mapStu.inset(make_pair(-1, "校長(zhǎng)"));

// 第三種 通過value_type的方式插入對(duì)象

mapStu.insert(map<int, string>::value_type(1, "小李")); // 第四種 通過數(shù)組的方式插入值

mapStu[3] = "小劉";

mapStu[5] = "小王";

  2.5刪除操作

clear();//刪除所有元素 erase(pos);//刪除pos迭代器所指的元素,返回下一個(gè)元素的迭代器。 erase(beg,end);//刪除區(qū)間[beg,end)的所有元素 ,返回下一個(gè)元素的迭代器。 erase(keyElem);//刪除容器中key為keyElem的對(duì)組。

  2.6查找操作

find(key);//查找鍵key是否存在,若存在,返回該鍵的元素的迭代器;/若不存在,返回map.end(); count(keyElem);//返回容器中key為keyElem的對(duì)組個(gè)數(shù)。對(duì)map來說,要么是0,要么是1。對(duì) multimap來說,值可能大于1。 lower_bound(keyElem);//返回第一個(gè)key>=keyElem元素的迭代器。 upper_bound(keyElem);//返回第一個(gè)key>keyElem元素的迭代器。 equal_range(keyElem);//返回容器中key與keyElem相等的上下限的兩個(gè)迭代器。

  3、map應(yīng)用案例

#define _CRT_SECURE_NO_WARNINGS

#include<iostream>

#include<map>

#include<string>

#include<vector>

#include <bits/stdc++.h>

using namespace std;

 

class Student

{

public:

    string name;

    int age;

public:

    Student(){}

    Student(string name, int age)

    {

         this->name = name;

         this->age = age;

    }

 };

 

 void test02()

 {

     map<int,Student> m;//存放學(xué)號(hào) 和 學(xué)員信息

     vector<int> v;//存放學(xué)號(hào)

 

     int i=0;

     for(i=0;i<5; i++)

     {

         cout<<"請(qǐng)輸入學(xué)生的編號(hào):";

         int num;

         cin>> num;

         v.push_back(num);

 

         cout<<"請(qǐng)輸入學(xué)生的信息:";

         string name;

         int age;

         cin>>name>>age;

 

         m.insert(make_pair(num,Student(name,age)));

     }

 

     //通過學(xué)號(hào)訪問學(xué)員信息

     vector<int>::iterator it=v.begin();

     for(;it != v.end(); it++)

     {

         //*it == num 學(xué)號(hào)

         cout<<*it<<", "<<m[*it].name<<", "<<m[*it].age<<endl;

     }

 

     //抽簽(vector容器的內(nèi)容打亂)

     random_shuffle(v.begin(), v.end());

 

     cout<<"‐‐‐‐‐‐‐‐‐"<<endl;

     it=v.begin();

     for(;it != v.end(); it++)

     {

         //*it == num 學(xué)號(hào)

         cout<<*it<<", "<<m[*it].name<<", "<<m[*it].age<<endl;

     }

 }

int main()

{

     test02();

     system("pause");

     return EXIT_SUCCESS;

}


  4、multimap應(yīng)用案例

  公司今天招聘了5個(gè)員工,5名員工進(jìn)入公司之后,需要指派員工在那個(gè)部門工作 人員信息有: 姓名 年齡 電話 工資等組成 通過Multimap進(jìn)行信息的插入 保存 顯示 分部門顯示員工信息 顯示全部員工信息 。

#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<map>#include<string>#include<vector>using namespace std;#define SALE_DEPATMENT 1 //銷售部門#define DEVELOP_DEPATMENT 2 //研發(fā)部門#define FINACIAL_DEPATMENT 3 //財(cái)務(wù)部門#define ALL_DEPATMENT 4 //所有部門//員工類class person{public:

    string name; //員工姓名

    int age; //員工年齡

    double salary; //員工工資

    string tele; //員工電話};//創(chuàng)建5個(gè)員工void CreatePerson(vector<person>& vlist){

    string seed = "ABCDE";

    for (int i = 0; i < 5; i++)

    {

        person p;

        p.name = "員工";

        p.name += seed[i];

        p.age = rand() % 30 + 20;

        p.salary = rand() % 20000 + 10000;

        p.tele = "010-8888888";

        vlist.push_back(p);

    }}//5名員工分配到不同的部門void PersonByGroup(vector<person>& vlist, multimap<int, person>& plist){

    int operate = -1; //用戶的操作

    for (vector<person>::iterator it = vlist.begin(); it != vlist.end(); it++)

    {

        cout << "當(dāng)前員工信息:" << endl;

        cout << "姓名:" << it->name << " 年齡:" << it->age << " 工資:" << it->salary << " 電話:" << it->tele << endl;

        cout << "請(qǐng)對(duì)該員工進(jìn)行部門分配(1 銷售部門, 2 研發(fā)部門, 3 財(cái)務(wù)部門):" << endl; scanf("%d", &operate);

        while (true)

        {

            if (operate == SALE_DEPATMENT){

            //將該員工加入到銷售部門

                plist.insert(make_pair(SALE_DEPATMENT, *it));

                break;

            }

            else if (operate == DEVELOP_DEPATMENT)

            {

                plist.insert(make_pair(DEVELOP_DEPATMENT, *it));

                break;

            }

            else if (operate == FINACIAL_DEPATMENT)

            {

                plist.insert(make_pair(FINACIAL_DEPATMENT, *it));

                break;

            }

            else

            {

                cout << "您的輸入有誤,請(qǐng)重新輸入(1 銷售部門, 2 研發(fā)部門, 3 財(cái)務(wù)部門):" << endl;

                scanf("%d", &operate);

            }

        }

    }

    cout << "員工部門分配完畢!" << endl;

    cout << "***********************************************************" << endl;}//打印員工信息void printList(multimap<int, person>& plist, int myoperate){

    if (myoperate == ALL_DEPATMENT)

    {

        for (multimap<int, person>::iterator it = plist.begin(); it != plist.end(); it++)

        {

            cout << "姓名:" << it->second.name << " 年齡:" << it->second.age << " 工資:" << it->second.salary << " 電話:" << it->second.tele << endl;

        }

        return;

    }

    multimap<int, person>::iterator it = plist.find(myoperate);

    int depatCount = plist.count(myoperate);

    int num = 0;

    if (it != plist.end())

    {

        while (it != plist.end() && num < depatCount){

            cout << "姓名:" << it->second.name << " 年齡:" << it->second.age << " 工資:" << it->second.salary << " 電話:" << it->second.tele << endl;

            it++;

            num++;

        }

    }}//根據(jù)用戶操作顯示不同部門的人員列表void ShowPersonList(multimap<int, person>& plist, int myoperate){

    switch (myoperate)

    {

        case SALE_DEPATMENT: printList(plist, SALE_DEPATMENT);

        break;

        case DEVELOP_DEPATMENT: printList(plist, DEVELOP_DEPATMENT);

        break;

        case FINACIAL_DEPATMENT: printList(plist, FINACIAL_DEPATMENT);

        break;

        case ALL_DEPATMENT: printList(plist, ALL_DEPATMENT);

        break;

    }}//用戶操作菜單void PersonMenue(multimap<int, person>& plist){

    int flag = -1;

    int isexit = 0;

    while (true)

    {

        cout << "請(qǐng)輸入您的操作((1 銷售部門, 2 研發(fā)部門, 3 財(cái)務(wù)部門, 4 所有部門, 0退 出):" << endl;

        scanf("%d", &flag);

        switch (flag)

        {

            case SALE_DEPATMENT: ShowPersonList(plist, SALE_DEPATMENT);

            break;

            case DEVELOP_DEPATMENT: ShowPersonList(plist, DEVELOP_DEPATMENT);

            break;

            case FINACIAL_DEPATMENT: ShowPersonList(plist, FINACIAL_DEPATMENT);

            break;

            case ALL_DEPATMENT: ShowPersonList(plist, ALL_DEPATMENT);

            break;

            case 0: isexit = 1;

            break;

            default: cout << "您的輸入有誤,請(qǐng)重新輸入!" << endl;

            break;

        }

        if (isexit == 1)

        {

            break;

        }

    }}int main(){

     vector<person> vlist;

     //創(chuàng)建的5個(gè)員工 未分組

     multimap<int, person> plist; //保存分組后員工信息 //創(chuàng)建5個(gè)員工

     CreatePerson(vlist);

     //5名員工分配到不同的部門

     PersonByGroup(vlist, plist);

     //根據(jù)用戶輸入顯示不同部門員工信息列表 或者 顯示全部員工的信息列表

     PersonMenue(plist);

     system("pause");

     return EXIT_SUCCESS;}

  5、容器總結(jié)

  vector的使用場(chǎng)景:比如軟件歷史操作記錄的存儲(chǔ)

  deque的使用場(chǎng)景:比如排隊(duì)購票系統(tǒng)

  list的使用場(chǎng)景:支持頻繁的不確實(shí)位置元素的移除插入

  set的使用場(chǎng)景:比如對(duì)手機(jī)游戲的個(gè)人得分記錄的存儲(chǔ)

  map的使用場(chǎng)景:比如按ID號(hào)存儲(chǔ)十萬個(gè)用戶,想要快速要通過ID查找對(duì)應(yīng)的用戶。二叉樹的找效率,這時(shí)就體現(xiàn)出來了。

  更多關(guān)于“智能物聯(lián)網(wǎng)培訓(xùn)”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來試聽。

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
什么是PlatformIo?

PlatformIO是什么PlatformIO是一個(gè)全面的物聯(lián)網(wǎng)開發(fā)平臺(tái),它為眾多硬件平臺(tái)和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡(jiǎn)化了開發(fā)過程,并能兼容各種...詳情>>

2023-10-14 12:55:06
云快照與自動(dòng)備份有什么區(qū)別?

1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時(shí)間點(diǎn)后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動(dòng)備份的主要目標(biāo)...詳情>>

2023-10-14 12:48:59
服務(wù)器為什么要用Linux?

服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨(dú)特的優(yōu)勢(shì)和特點(diǎn)。包括其...詳情>>

2023-10-14 12:34:11
ORM解決的主要問題是什么?

ORM(對(duì)象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲(chǔ),而在面向?qū)ο?..詳情>>

2023-10-14 12:26:19
Go為什么不支持三元運(yùn)算符?

Go為什么不支持三元運(yùn)算符Go語言是一種以簡(jiǎn)潔和有效性為目標(biāo)的編程語言,因此在設(shè)計(jì)過程中,Go的設(shè)計(jì)者刻意排除了一些他們認(rèn)為可能導(dǎo)致復(fù)雜性或...詳情>>

2023-10-14 12:12:36
中国XMXM18小孩的推荐机制| 亚洲人成网站色7799| 亚洲AV永久无码成人网站| 亚洲欧美日韩国产综合V| 中文字幕无码一区二区免费| 成人免费A级毛片久久| 国产精品久久一区二区三区 | 日本熟妇人妻XXXXX| 无码秘 人妻一区二区三区| 亚洲欧美综合区丁香五月小说| 18禁止免费观看试看免费大片| 大哥的女人中文字幕完整版| 黑人巨鞭大战欧美丰满少妇| 亂倫近親相姦中文字幕| 日韩精品一区二区三区中文无码| 性色AV极品无码专区亚洲| 一区二区三区无码被窝影院| がーるずらっしゅ在线中文| 国产精品一区二区高清在线| 老头握住校花的双乳| 少妇侧入内射一区二区 | 狠狠躁夜夜躁人人爽天天5| 蜜桃久久国产一区二区| 特级毛片AAAAAA| 夜先锋AV资源网站| 春色精品久久久久午夜aⅴ| 精品久久久久久中文字幕无码VR| 欧美人妻精品一区二区在线 | 在教室伦流澡到高潮HGL动漫| 粉嫩av.一区二区三区免费| 精品少妇人妻AV无码久久| 人和畜禽CROPROATION| 亚洲AV无码一区毛片AV| HD专干中国老太婆| 狠狠躁天天躁日日躁欧美| 欧美大胆老熟妇乱子伦视频| 亚洲6080YY久久无码产自国| 97人妻天天爽夜夜爽二区| 国产午夜福利精品一区二区三区 | 太太其实你也很想要的对吧| 一区二区三区无码AV不卡| 国产CHINESE男男GAYGAY网站| 久久香综合精品久久伊人| 天堂岛最新版在线BT天堂| 中国VODAFONEWIFI粗| 国产免费久久精品99久久| 欧美日韩国产成人高清视频| 亚洲产在线精品亚洲第一站一| 啊灬啊别停灬用力啊公视频| 久久国产精品久久久久久| 他扒开内裤把舌头进去会有影响吗| 夜夜高潮夜夜爽高清完整版1| 国产成人无码AV在线影院| 欧美成人免费观看在线看| 亚洲爆乳无码专区WWW| 成人免费无码不卡毛片| 巨爆乳寡妇中文在线观看| 午夜人性色福利无码视频在线观看| 666西方最大但人文艺术| 国语第一次处破女| 色ww1区2区在线观看| 中文字幕无码久久一区| 好疼太大了太粗太长了视频| 日日摸日日碰人妻无码老牲| 在线观看特色大片免费视频 | 东北妇女精品BBWBBW| 免费毛片45分钟| 亚洲国产精品嫩草影院久久| 嗯~别停~用力点~再快点| 欧美XXXX做受欧美88BBW| 亚洲久热无码AV中文字幕| 国产成人亚洲综合无码AⅤ| 欧美性猛交aaaa乱大交| 亚洲中字幕日产2021草莓| 国产欧美成AⅤ人高清| 日韩午夜理论免费TV影院| 99国精产品W灬源码1688| 久久久精品人妻一区二区三区| 西西人体午夜大胆无码视频| 成年女人免费观看播放视频| 男人J桶进女人P无遮挡| 野花日本大全免费观看2019 | 国产AV高潮社区| 人妻久久久精品99系列A片| 中无码人妻丰满熟妇啪啪| 精品无码人妻被多人侵犯aⅴ| 无码人妻AⅤ一区二区三区蜜桃| 宝贝把腿张得大一点就不痛了| 美女扒开尿口让男人桶| 亚洲日产韩国一二三四区| 国内AI明星造梦鞠婧祎MV| 天天躁夜夜躁狠狠躁2020有剧| 波多野结衣一区二区免费视频| 妺妺窝人体色77777791| 又大又硬又粗再深一点视频| 精品久久久久久中文字幕无码软件 | 餐桌下玩弄人妻丝袜小脚| 欧美性受XXXX黑人XYX性爽| 中文字幕日韩人妻不卡一区| 久久精品亚洲精品无码金尊| 亚洲精品无码久久久久久| 国偷自产AV一区二区三区| 小嫩模无套内谢第一次| 国产精品福利自产拍在线观看| 少妇高潮一区二区三区99| 成码无人AV片在线观看网站 | 久久综合伊人中文字幕| 亚洲日韩亚洲另类激情文学| 娇妻借好友1—38| 亚洲成a人片在线观看无码专区| 国产亚洲综合欧美视频| 无人区码一码二码三码在线| 国产黑色丝袜在线视频| 天堂いっしょにしよ在线| 国产成人亚洲精品| 玩弄少妇人妻中文字幕| 国产成人无码AA精品一区色欲| 伸进衣服里吃奶捏胸视频| 国产97色在线 | 亚洲| 天堂AV旡码AV毛片毛片免费| 国产XXXX农村野外高潮HD发| 天天躁日日躁狠狠躁| 国产激情无码一区二区| 无码一区二区三区中文字幕| 强开小婷嫩苞又嫩又紧视频韩国| 人妻丰满熟妇AV无码处处不卡| 51无码人妻精品1国产| 免费A级毛片无码A∨中文字幕| 伊人久久大香线蕉亚洲| 久久青青草原亚洲AV无码麻豆| 亚洲中文字幕无码AV在线| 久久婷婷五月综合色精品| 喑交小拗女一区二区三区| 蜜芽亚洲AV无码精品国产午夜| 最新系列国产专区|亚洲国产| 男人边吃奶边揉好爽免费视频| AAAA级少妇高潮大片在线观看| 欧美又粗又大XXXXBBBB疯狂| 把腿张开老子臊烂你的黄漫| 日本一线和三线的区别| 国产AV无码专区亚洲AV漫画 | 你再躲一个试试BY深巷无酒| 99国产精品久久久久久久成人热| 人妻互换精品一区二区| 丰满少妇熟女高潮流白浆| 天堂АⅤ在线最新版在线| 国产熟妇XXXXXⅩ性Ⅹ交| 亚洲国产成人久久综合电影| 久久久久久精品免费免费WEⅠ | 麻豆专媒体一区二区| 99精品国产99久久久久久97| 日韩AⅤ人妻无码一区二区| 国产成人精品无码免费看| 小婷又紧又嫩又窄又多水| 精品亚洲国产成人AV在线| 曰批免费视频免费无码软件| 欧美日韩一区二区三区精品视频| 成人AV片在线观看免费| 无码人妻久久1区2区3区| 精东传媒VS天美传媒| 中文字幕 制服 亚洲 另类| 日本VPSWINDOWS怀孕| 国产精品成人99一区无码| 亚洲欧美成人久久综合中文网| 蜜臀av蜜臀一区二区三区| 成人欧美一区二区三区| 性色AV极品无码专区亚洲| 久久久久久亚洲精品无码| JAPANESE国产永久| 玩弄CHINESE丰满人妻VI| 精品综合久久久久久98| 97丨九色丨国产人妻▌| 四季亚洲AV无码一区在线观看| 精品国产乱码久久久久久下载| 2021少妇久久久久久久久久| 色综合伊人色综合网站| 妓女妓女影院妓女影库妓女网| 4444亚洲人成无码网在线观看 | 女人18毛片A级毛片嫰阝| 高潮白浆潮喷正在播放| 亚洲乱码日产精品B在线| 欧美精品色婷婷五月综合| 国产成人V在线免播放观看| 亚洲熟妇无码AV在线少妇| 人妻av一区二区三区精品| 国产一精品一AV一免费爽爽| 中国内地毛片免费高清| 少妇人妻综合久久中文888| 精品人妻一区二区三区视频| VODAFONEWIFI另类| 亚洲AV成人无码精品直播在线 | TPU色母能与PA6色母通用吗| 性高湖久久久久久久久AAAAA| 麻花传媒68XXX在线观看| 国产成人亚洲日韩欧美| 一区二区三区中文字幕| 少妇乳大丰满在线播放| 久久亚洲国产精品123区| 夫妇联欢会回不去的夜晚樱花| 亚洲尤码不卡AV麻豆|