国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學習站 | 隨時隨地免費學

            千鋒教育

            掃一掃進入千鋒手機站

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

            關(guān)注千鋒學習站小程序
            隨時隨地免費學習課程

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

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

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

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

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

              2、map/multimap容器常用API

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

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

              2.2賦值操作函數(shù)

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

              2.3大小操作函數(shù)

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

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

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

            map<int, string> mapStu;

            // 第一種 通過pair的方式插入對象

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

            // 第二種 通過pair的方式插入對象

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

            // 第三種 通過value_type的方式插入對象

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

            mapStu[3] = "小劉";

            mapStu[5] = "小王";

              2.5刪除操作

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

              2.6查找操作

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

              3、map應用案例

            #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;//存放學號 和 學員信息

                 vector<int> v;//存放學號

             

                 int i=0;

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

                 {

                     cout<<"請輸入學生的編號:";

                     int num;

                     cin>> num;

                     v.push_back(num);

             

                     cout<<"請輸入學生的信息:";

                     string name;

                     int age;

                     cin>>name>>age;

             

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

                 }

             

                 //通過學號訪問學員信息

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

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

                 {

                     //*it == num 學號

                     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 學號

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

                 }

             }

            int main()

            {

                 test02();

                 system("pause");

                 return EXIT_SUCCESS;

            }


              4、multimap應用案例

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

            #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 //財務部門#define ALL_DEPATMENT 4 //所有部門//員工類class person{public:

                string name; //員工姓名

                int age; //員工年齡

                double salary; //員工工資

                string tele; //員工電話};//創(chuàng)建5個員工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 << "當前員工信息:" << endl;

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

                    cout << "請對該員工進行部門分配(1 銷售部門, 2 研發(fā)部門, 3 財務部門):" << 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 << "您的輸入有誤,請重新輸入(1 銷售部門, 2 研發(fā)部門, 3 財務部門):" << 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 << "請輸入您的操作((1 銷售部門, 2 研發(fā)部門, 3 財務部門, 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 << "您的輸入有誤,請重新輸入!" << endl;

                        break;

                    }

                    if (isexit == 1)

                    {

                        break;

                    }

                }}int main(){

                 vector<person> vlist;

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

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

                 CreatePerson(vlist);

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

                 PersonByGroup(vlist, plist);

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

                 PersonMenue(plist);

                 system("pause");

                 return EXIT_SUCCESS;}

              5、容器總結(jié)

              vector的使用場景:比如軟件歷史操作記錄的存儲

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

              list的使用場景:支持頻繁的不確實位置元素的移除插入

              set的使用場景:比如對手機游戲的個人得分記錄的存儲

              map的使用場景:比如按ID號存儲十萬個用戶,想要快速要通過ID查找對應的用戶。二叉樹的找效率,這時就體現(xiàn)出來了。

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

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

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

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

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

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

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

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

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

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

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

            2023-10-14 12:12:36