一、定义
Map是STL [1] 的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道
《百度百科》
简单来说,对于数组来说,索引就相当于键值,s[i]就相当于映照的数据.map中不允许重复的键值,multimap允许重复的键值
二、用法
由于map容器也是使用红黑树存取,所以它的用法与set一样在这里就直接写出代码
三、map代码实现
#include<map>
#include<string>
#include<iostream>
using namespace std;
int main(int argc,char *argv[])
{
map<int,char >m;//定义map容器,其中键值为int型,映照的数据为char 型
m[25]='m';
m[28]='k';
m[30]='a';
m.erase(28);//删除键值为28的元素
map<int,char>::iterator it;//定义迭代器
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<" :"<<(*it).second<<endl;//读取键值和映照的数据
}
map<int,char>::reverse rit;
for(rit=m.rbegin();rit!=m.rend();rit++)
{
cout<<(*rit).first<<" :"<<(*rit).second<<endl;
}
}
实现结果
multimap
由于multimap可以插入重复的键值,所以插入,删除,查找都与map的用法不相同
四、multimap代码实现
一、实现重复插入
#include<iostream>
#pragma warning(disable:4786)
#include<map>
#include<string>
using namespace std;
int main(int argc,char *argv[])
{ multimap<string,double> m;
m.insert(pair<string,double>("jack",300.5));
//向multimap插入数据
m.insert(pair<string,double>("kity",200));
m.insert(pair<string,double>("Memi",500));
m.insert(pair<string,double>("jack",300.5));//插入重复的数据
multimap<string,double>::iterator it;
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<" :"<<(*it).second<<endl;
}
m.erase("jack");
cout<<"the elements after deleted :"<<endl;
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<" :"<<(*it).second<<endl;
}
}
实现结果:
二、实现删除
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(int argc,char *argv[])
{
multimap<string,double>m;
//插入相关的数据
m.insert(pair<string,double>("jack",300.5) );
m.insert(pair<string,double>("Tom",200));
m.insert(pair<string,double>("jack",100.5) );
m.insert(pair<string,double>("Memi",500));
multimap<string,double>::iterator it;
for(it=m.begin();it!=m.end();it++)
{
cout<<(*it).first<<" :"<<(*it).second<<endl;
}
cout<<"查找的结果"<<endl;
it=m.find("jack");
if(it!=m.end())
{
cout<<(*it).first<<" :"<<(*it).second<<endl;
}
else
{
cout<<"抱歉没找到"<<endl;
}
it=m.find("asda");
if(it!=m.end())
{
cout<<(*it).first<<" :"<<(*it).second<<endl;
}
else
{
cout<<"抱歉没找到"<<endl;
}
return 0;
}
实现结果: