STL15-map/multimap容器
生活随笔
收集整理的這篇文章主要介紹了
STL15-map/multimap容器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
map的key值不可以重復
multimap的key值可以重復
#if 1 #include<iostream> #include<map> using namespace std; //初始化 void test01() {//map容器參數 第一個參數key的類型 第二個參數value類型map<int, int> mymap;//插入元素 pair.first key值 pair.second value值//第一種初始化方法pair<map<int,int>::iterator,bool> ret=mymap.insert(pair<int, int>(10, 20)); //前三種都是這樣:判斷插入成功與否if (ret.second) {cout << "第一次插入成功" << endl;}elsecout << "第一次插入失敗" << endl;ret = mymap.insert(pair<int, int>(10, 30));if (ret.second) {cout << "第二次插入成功" << endl;}elsecout << "第二次插入失敗" << endl;//第二種初始化方法mymap.insert(make_pair(20, 20));//第三種初始化方法mymap.insert(map<int,int>::value_type(30, 30));//第四種初始化方法mymap[40] = 40;for (map<int,int>::iterator it=mymap.begin();it!=mymap.end();it++){//*it取出來的是一個paircout <<"key:" <<it->first << " value:"<<(*it).second << endl;}//此種方法//發現如果key不存在,創建pair插入到map容器中//如果發現key存在,那么會用新的value值替換原value值mymap[40] = 10;cout << "第二次遍歷" << endl;for (map<int, int>::iterator it = mymap.begin(); it != mymap.end(); it++){//*it取出來的是一個paircout << "key:" << it->first << " value:" << (*it).second << endl;}//如果通過【】方式訪問map中一個不存在的key,//那么map會將這個訪問的key插入到map中,并且給value一個默認值cout << mymap[60] << endl;cout << "第三次遍歷" << endl;for (map<int, int>::iterator it = mymap.begin(); it != mymap.end(); it++){//*it取出來的是一個paircout << "key:" << it->first << " value:" << (*it).second << endl;} } class MyKey { public:MyKey(int index, int id) {this->mIndex = index;this->mID = id;} public:int mIndex;int mID; }; struct mycompare {bool operator()(MyKey k1, MyKey k2) {return k1.mIndex > k2.mIndex;} };void test02() {//注意此處添加比較函數(系統不會對自定數據類型進行比較)map<MyKey, int,mycompare> mymap; mymap.insert(make_pair(MyKey(1, 2), 1));mymap.insert(make_pair(MyKey(2, 3), 2));mymap.insert(make_pair(MyKey(4, 5), 4));for (map<MyKey, int, mycompare>::iterator it = mymap.begin(); it != mymap.end(); it++) {cout << it->first.mIndex << " " << (*it).first.mID << endl;}} //equal_range void test03() {map<int, int> mymap;mymap.insert(make_pair(1, 1));mymap.insert(make_pair(2, 2));mymap.insert(make_pair(3, 3));mymap.insert(make_pair(4, 4));mymap.insert(make_pair(6, 6));pair<map<int, int>::iterator, map<int, int>::iterator> ret=mymap.equal_range(5);cout << (*(ret.first)).first << endl;cout << (*(ret.second)).first << endl;ret = mymap.equal_range(2);cout << (*(ret.first)).first << endl;cout << (*(ret.second)).first << endl;}int main() {cout << "test01" << endl;test01();cout << "test02" << endl;test02();cout << "test03" << endl;test03();return 0; } #endif運行結果:
multimap使用案例:
我的試驗:
#if 1 #include<iostream> #include<map> #include<time.h> #include<vector> #include<string> #define SaleDepartment 1 #define FinanceDepartment 2 #define TechnologyDepartment 3 using namespace std;//multimap案例 //公司招聘5名員工 需要指派員工在哪個部門工作 //人員信息有:姓名 年齡 電話 工資等 //通過multimap 進行信息的插入 保存 顯示 //分部門顯示員工信息 顯示全部員工信息 class Person { public:Person(){}Person(string name, int age, string tel, int salary) {mName = name;mAge = age;mTel = tel;mSalary = salary;} public:string mName;int mAge;string mTel;int mSalary; }; void CreateEmployee(vector<Person>& v) {string Name="ABCDE";for (int i = 0; i < 5; i++){Person p;p.mName = "員工";p.mName+=Name[i];p.mAge = 20 + i;p.mTel = "010-88888888";p.mSalary = 10000;v.push_back(p);} } void AssignDepartment(multimap<int, Person> &mp, vector<Person>& v) {srand(time(NULL));for (int i = 0; i < v.size(); i++){int DepartmentID = rand() % 3 + 1; //生成1-3之間的隨機數cout << "rand() value:"<<DepartmentID << endl;switch (DepartmentID){case 1://mp.insert(SaleDepartment, v[i]); 我的錯誤//mp.insert(make_pair<SaleDepartment, v[i]>); 我的錯誤cout << "enter SaleDepartment" << endl;mp.insert(make_pair(SaleDepartment, v[i]));break;case 2:cout << "enter FinanceDepartment" << endl;mp.insert(make_pair(FinanceDepartment, v[i]));break;case 3:cout << "enter TechnologyDepartment" << endl;mp.insert(make_pair(TechnologyDepartment, v[i]));break;default:break;}}}void ShowEmployeeByDepart(multimap<int, Person> &mp, int Department) {int n = mp.count(Department);cout << Department << endl;for (multimap<int, Person>::iterator it = mp.find(Department); it != mp.end(), n>0; it++){cout <<(*it).second.mName << endl;n--;} } void ShowEmployee(multimap<int, Person> &mp) {ShowEmployeeByDepart(mp, SaleDepartment);ShowEmployeeByDepart(mp, FinanceDepartment);ShowEmployeeByDepart(mp, TechnologyDepartment);}void test01() {vector<Person> vp;CreateEmployee(vp);multimap<int, Person> mp;AssignDepartment(mp, vp);ShowEmployee(mp); }int main() {test01();return 0; } #endif標準:
#if 1 #include<iostream> #include<map> #include<time.h> #include<vector> #include<string> #define SaleDepartment 1 #define FinanceDepartment 2 #define TechnologyDepartment 3 using namespace std;//multimap案例 //公司招聘5名員工 需要指派員工在哪個部門工作 //人員信息有:姓名 年齡 電話 工資等 //通過multimap 進行信息的插入 保存 顯示 //分部門顯示員工信息 顯示全部員工信息//class 默認private struct默認public class Person { public:Person() {}Person(string name, int age, string tel, int salary) {mName = name;mAge = age;mTel = tel;mSalary = salary;} public:string mName;int mAge;string mTel;int mSalary; };void CreateEmployee(vector<Person>& v) {string Name = "ABCDE";for (int i = 0; i < 5; i++){Person p;p.mName = "員工";p.mName += Name[i]; //string類型拼接不可直接用+號,必須用+=p.mAge = 20 + i;p.mTel = "010-88888888";p.mSalary = 10000;v.push_back(p);} }void AssignDepartment(multimap<int, Person> &mp, vector<Person>& v) {srand(time(NULL));for (vector<Person>::iterator it=v.begin();it!=v.end();it++){int DepartmentID = rand() % 3 + 1; //生成1-3之間的隨機數 rand()%(max-min+1)+mincout << "rand() value:" << DepartmentID << endl;switch (DepartmentID){case SaleDepartment://mp.insert(SaleDepartment, v[i]); 我的錯誤//mp.insert(make_pair<SaleDepartment, v[i]>); 我的錯誤//cout << "enter SaleDepartment" << endl;mp.insert(make_pair(SaleDepartment, *it));break;case FinanceDepartment://cout << "enter FinanceDepartment" << endl;mp.insert(make_pair(FinanceDepartment, *it));break;case TechnologyDepartment://cout << "enter TechnologyDepartment" << endl;mp.insert(make_pair(TechnologyDepartment, *it));break;default:break;}}}void ShowEmployeeByDepart(multimap<int, Person> &mp, int Department) {//查找此department下的第一個員工multimap<int, Person>::iterator itt = mp.find(Department);//count查找到此Department下的員工個數int n = mp.count(Department); cout << Department << endl;for (multimap<int, Person>::iterator it=itt; it != mp.end(), n>0; it++){cout <<"姓名:" <<(*it).second.mName <<"年齡:"<<(*it).second.mAge<<"電話:"<<(*it).second.mTel<< "工資:" << (*it).second.mSalary << endl;n--;} } void ShowEmployee(multimap<int, Person> &mp) {ShowEmployeeByDepart(mp, SaleDepartment);ShowEmployeeByDepart(mp, FinanceDepartment);ShowEmployeeByDepart(mp, TechnologyDepartment);}void test01() {//存放新員工的信息vector<Person> vp;//創建員工CreateEmployee(vp);multimap<int, Person> mp;//員工分組AssignDepartment(mp, vp);//打印每一部門員工信息ShowEmployee(mp); }int main() {test01();return 0; } #endif總結
以上是生活随笔為你收集整理的STL15-map/multimap容器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ilitek win10 触摸屏驱动_想
- 下一篇: django select option