map应用

来源:互联网 发布:图书管理系统c语言代码 编辑:程序博客网 时间:2024/04/30 07:30

Map是STL的一个关联容器,它提供一对一的数据处理能力。其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值,map依关键字而有序的。由于这个特性,在我们处理一对一数据的时候会很方便。下面介绍map的一般用法:

1、数据插入

通过pair插入数据

pair 是 一种模版类型。每个pair 可以存储两个值。这两种值无限制。也可以将自己写的struct的对象放进去。

pair声明

pair<int,string>p;

pari<double,int>p;

pair<int,string>p(4,"student");

pair<int,pair<int,int> >

#include <iostream>#include<map>#include<string>using namespace std;int main(){map<int,string>student;student.insert(pair<int,string>(1,"LeBron"));student.insert(pair<int,string>(2,"Kevin"));student.insert(pair<int,string>(3,"Blake"));student.insert(pair<int,string>(4,"Noah"));map<int,string>::iterator iter;for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;return 0;}
数组插入

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;student[0]="LeBron";student[1]="Kevin";student[2]="Blake";student[3]="Noah";map<int,string>::iterator iter;for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;return 0;}
value_type插入

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;student.insert(map<int,string>::value_type(1,"LeBron"));student.insert(map<int,string>::value_type(2,"Kevin"));student.insert(map<int,string>::value_type(3,"Blake"));student.insert(map<int,string>::value_type(4,"Noah"));map<int,string>::iterator iter;for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;return 0;}
在通过数组插入数据的情况下,后插入数据与之前插入数据关键字一样时,之前插入数据就会被覆盖,而用另外两种则不会。

2、插入数据检测

pair<map<int,string>::iterator,bool>

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;pair<map<int,string>::iterator,bool>test_insert;test_insert=student.insert(pair<int,string>(1,"LeBron"));if(test_insert.second)cout<<"successful!"<<endl;elsecout<<"Failure!"<<endl;test_insert=student.insert(pair<int,string>(1,"Kevin"));if(test_insert.second)cout<<"successful!"<<endl;elsecout<<"Failure!"<<endl;map<int,string>::iterator iter;for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;return 0;}

3、map遍历(正向与反向)

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;student.insert(pair<int,string>(1,"LeBron"));student.insert(pair<int,string>(2,"kevin"));student.insert(pair<int,string>(3,"Pierce"));student.insert(pair<int,string>(1,"Parker"));map<int,string>::reverse_iterator iter;for(iter=student.rbegin();iter!=student.rend();iter++)cout<<iter->first<<" "<<iter->second<<endl;map<int,string>::iterator iter1;for(iter1=student.begin();iter1!=student.end();iter1++)cout<<iter1->first<<" "<<iter1->second<<endl;return 0;}

也可以通过数组方式遍历

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;student.insert(pair<int,string>(1,"LeBron"));student.insert(pair<int,string>(2,"kevin"));student.insert(pair<int,string>(3,"Pierce"));student.insert(pair<int,string>(1,"Parker"));map<int,string>::reverse_iterator iter;for(iter=student.rbegin();iter!=student.rend();iter++)cout<<iter->first<<" "<<iter->second<<endl;map<int,string>::iterator iter1;for(iter1=student.begin();iter1!=student.end();iter1++)cout<<iter1->first<<" "<<iter1->second<<endl;return 0;}

4、通过关键字进行查找

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;student.insert(pair<int,string>(1,"LeBron"));student.insert(pair<int,string>(2,"Harden"));student.insert(pair<int,string>(3,"Durant"));student.insert(pair<int,string>(4,"Blake"));map<int,string>::iterator iter;iter=student.find(0);if(iter!=student.end())cout<<iter->first<<" "<<iter->second<<endl;elsecout<<"Failure!"<<endl;return 0;}

5、删除数据,这里要用到erase(),他重载了三个函数,分别是用迭代器删除,用关键字删除以及利用迭代器成块删除。

#include <iostream>#include<string>#include<map>using namespace std;int main(){map<int,string>student;if(student.empty())cout<<"Empty!"<<endl;student.insert(pair<int,string>(1,"LeBron"));student.insert(pair<int,string>(2,"Blake"));student.insert(pair<int,string>(3,"Nash"));student.insert(pair<int,string>(4,"Paul"));student.insert(pair<int,string>(5,"Kobe"));//erase1map<int,string>::iterator iter;iter=student.find(5);student.erase(iter);for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;cout<<endl;//erase2student.erase(0);//删除成功会返回1,否则返回0 for(iter=student.begin();iter!=student.end();iter++)cout<<iter->first<<" "<<iter->second<<endl;//erase3cout<<endl;student.erase(student.begin(),student.end());//全部删除,亦可以用clear()函数 if(student.empty())cout<<"Empty!"<<endl; return 0;}

6、排序

由前面介绍,我们知道map有自动排序功能保证数据是依关键字有序的;但map只是定义了简单数据类型的排序,如果关键字为结构变量或者其他复杂数据类型时,就要自己定义数据大小的判定函数。

#include <iostream>#include<string>#include<map>using namespace std;typedef struct studentInfo{int ID;string stu_name;bool operator <(const studentInfo &a)const{if(ID<a.ID)return true;if(ID==a.ID)return stu_name.compare(a.stu_name)<0;return false;}}stuInfo;int main(){map<stuInfo,int>stu;stuInfo stuIn;stuIn.ID=1;stuIn.stu_name="LeBron";stu.insert(pair<stuInfo,int>(stuIn,1));stuIn.ID=2;stuIn.stu_name="Durant";stu.insert(pair<stuInfo,int>(stuIn,2));map<stuInfo,int>::iterator iter;for(iter=stu.begin();iter!=stu.end();iter++)cout<<iter->first.ID<<" "<<iter->first.stu_name<<" "<<" "<<iter->second<<endl; return 0;}


0 0
原创粉丝点击