1、Map映照容器 map创建元素插入和遍历访问
//创建map对象 键值与映照数据的类型自己定义 在默认比较函数下 元素的插入按键值小到大
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
int main()
{
map<string,double> m;
m["chen"]=99;
m["bin"]=77;
m["zhen"]=88;
map<string,double>::iterator it;
for(it=m.begin(); it!=m.end(); it++)
{
cout<<(*it).second<<":"<<(*it).first<<endl;
}
return 0;
}
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
#include<deque>
#include<list>
using namespace std;
int main()
{
int n,w;
map<int,int>m;
while(scanf("%d",&n)!=EOF)
{
m.clear();
for(int i=0;i<n;i++)
{
scanf("%d",&w);
m[w]=i;
}
map<int,int>::iterator it;
for(it=m.begin();it!=m.end();it++)
cout<<(*it).first<<" "<<(*it).second<<" ";
cout<<endl;
}
return 0;
}
2、
map映照容器元素的删除
//使用erase()删除某位置或一个区间或等于某个键值的元素
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
int main(int argc, char* argv[])
{
map<string,float> m;
m["chen"]=99;
m["zhen"]=88;
m["bin"]=77;
map<string,float>::iterator it;
for(it=m.begin(); it!=m.end(); it++)
{
cout<<(*it).first<<":"<<(*it).second<<endl;
}
m.erase("chen");
for(it=m.begin(); it!=m.end(); it++)
{
cout<<(*it).first<<":"<<(*it).second<<endl;
}
return 0;
}
map映照容器元素的反向遍历
//使用反向迭代器reverse_iterator反向遍历map中的数据 rbegin()和rend()指出反向遍历的起始位置和终止位置
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
int main()
{
map<string,float> m;
m["chen"]=99;
m["zhen"]=88;
m["bin"]=77;
map<string,float>::reverse_iterator rit;
for(rit=m.rbegin(); rit!=m.rend(); rit++)
{
cout<<(*rit).first<<":"<<(*rit).second<<endl;
}
return 0;
}
map映照容器元素的搜索
//使用find() 如搜索到 返回该键值所在迭代器位置 否则 返回end()
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
int main()
{
map<string,float> m;
m["chen"]=99;
m["zhen"]=88;
m["bin"]=77;
map<string,float>::iterator it;
it=m.find("chen");
if(it!=m.end())
cout<<(*it).first<<":"<<(*it).second<<endl;
else cout<<"not find it!"<<endl;
it=m.find("sb");
if(it!=m.end())
cout<<(*it).first<<":"<<(*it).second<<endl;
else cout<<"not find it!"<<endl;
return 0;
}
map映照容器自定义比较函数
//如果元素不是结构体
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
struct N
{
bool operator()(const double&a,const double&b)//(数字类型决定排序方式)
{
//const后面根据map<a,b>中的a(键值)来决定
return a>b;//(符号决定排序方式)
}
};
int main()
{
map<double,string,N>m;
// m["chen"]=99;
// m["zhen"]=88;
// m["bin"]=77;
m[99]="chen";
m[88]="zhen";
m[77]="bin";
map<double,string,N>::iterator it;
for(it=m.begin(); it!=m.end(); it++)
{
cout<<(*it).first<<":"<<(*it).second<<endl;
}
return 0;
}
//如果元素是结构体
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<ctype.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<set>
#include<math.h>
#include<vector>
#include<map>
using namespace std;
struct N
{
string name;
double score;
bool operator<(const N&a)const
{
return score>a.score;
}
};
int main()
{
map<N,int> m;
N a;
a.name="chen";
a.score=99;
m[a]=2;
a.name="zhen";
a.score=88;
m[a]=8;
a.name="bin";
a.score=77;
m[a]=3;
map<N,int>::iterator it;
for(it=m.begin(); it!=m.end(); it++)
{
cout<<(*it).second<<":"<<((*it).first).name<<" "<<((*it).first).score<<endl;
}
return 0;
}