从零起步看算法(第十八天 5.4)
//映射
1.映射基本操作
//引用
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
map<string,int> dict;
//构造一个映射
dict.insert(pair<string,int>("Tom",1));
//映射的插入
//元祖的结构
dict.insert(pair<string,int>("Jony",2));
dict.insert(pair<string,int>("Mary",3));
dict.insert(pair<string,int>("Tom",2));//不会改变原有映射
dict["FZZ"]=1;
//映射的访问
dict["XY"] =2;
cout<<"FZZ in the class "<<dict["FZZ"]<<endl;
//查找关键字
//有返回1,无返回0
if(dict.count("XY")){
cout<<"XY in the class "<<dict["XY"]<<endl;
}
else{
cout<<"XY have no class !"<<endl;
}
//遍历映射
//first 表示key,second 表示value
for(map<string,int>::iterator it=dict.begin();it!=dict.end();++it){
cout<<it->first<<" in the class "<<it->second<<endl;
}
//清空
dict.clear();
//消除 dict.erase();
// 个数 dict.size() ;
return 0;
}
2.map的简单应用
熟悉map的使用方法和应用
//蒜头君面试
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main() {
map<int,int>dict;
int n;
cin>>n;
int cnt=1;
while(n){
int x;
cin>>x;
if(dict.count(x)){
dict[x]=dict[x]+1;
}
else
dict[x]=cnt;
n--;
}
int max=1;
int tos=0;
for(map<int,int>::iterator it=dict.begin();it!=dict.end();it++){
if(it->second>max)
{
max=it->second;
tos=it->first;
}
if(it->second==max){
if(it->first>tos){
tos=it->first;
}
}
}
cout<<tos<<" "<<max<<endl;
return 0;
}
3.二维map的操作
1.三项参数,使用二维map的思想
2.内外迭代器的使用
重点
//水果店
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
//定义二维map
map<string,map<string,int> > dict;
int n;
cin>>n;
while(n){
string str1,str2;
int num;
cin>>str1>>str2>>num;
//小便利
dict[str2][str1]+=num;
n--;
}
//外迭代器
map<string,map<string,int> >::iterator it;
//内迭代器
map<string ,int>::iterator it2;
for(it=dict.begin();it!=dict.end();it++){
cout<<it->first<<endl;
//内迭代器的遍历
for(it2=it->second.begin();it2!=it->second.end();it2++){
cout<<" |----"<<it2->first<<"("<<it2->second<<")"<<endl;
}
}
return 0;
}