map映照容器

  1 //map映照容器是由一个键值和一个映照数据组成的,键值与映照数据之间具有一一映照的关系 
  2 //map映照容器的键值不允许重复 ,比较函数值对元素
  3 //的键值进行比较,元素的各项数据可通过键值检索出来
  4 
  5 
  6 #include<iostream>
  7 #include<map>
  8 #pragma warning(disable:4786)  //强制编译器忽略标记符超长警告 
  9 #include<string>
 10 using namespace std;
 11 int main()
 12 {
 13     //定义map对象,当前没有任何元素
 14     map<string,float> m1;
 15     //插入元素,按键值的由小到大放入黑白数中
 16     m1["Jack"]=98.5;
 17     m1["Bomi"]=96.0;
 18     m1["Kate"]=97.5;
 19     //前向遍历元素
 20     map<string,float>::iterator it;
 21     for(it=m1.begin();it!=m1.end();it++)
 22     {
 23         //输出键值与映照数据
 24         cout<<(*it).first<<":"<<(*it).second<<endl;
 25      }
 26     map<int,char> m2;
 27     //插入元素,按键值的由小到大放入黑白树中
 28     m2[25]='m';
 29     m2[28]='k';
 30     m2[10]='x';
 31     m2[30]='a';
 32     //删除键值为28的元素
 33     m2.erase(28);
 34     //前向遍历元素
 35     for(map<int,char>::iterator it=m2.begin();it!=m2.end();it++)
 36     {
 37         //输出键值与映照数据
 38         cout<<(*it).first<<":"<<(*it).second<<endl; 
 39      }
 40      //可以使用反向迭代器reverse_iterator反向遍历map映照容器中的数据,需要rbegin()方法和rend()方法指出反向遍历的起始位置和终止位置
 41      for(map<int,char>::reverse_iterator rit=m2.rbegin();rit!=m2.rend();rit++)
 42      {
 43          cout<<(*rit).first<<":"<<(*rit).second<<endl;
 44       } 
 45     map<int,char>::iterator fit;
 46     //使用find()方法来搜索某个键值,如果搜到了,返回其迭代器位置,否则,返回end()迭代器位置
 47     fit=m2.find(25);
 48     if(fit!=m2.end()) //搜索到该值 
 49     {
 50         cout<<(*fit).first<<":"<<(*fit).second<<endl;
 51      } 
 52      else
 53      {
 54          cout<<"not found it"<<endl;
 55      }
 56     //自定义比较函数myComp
 57     /*struct myComp
 58     {
 59         bool operator()(const int &a,const int &b)
 60         {
 61             if(a!=b) return a>b;
 62             else
 63             return a>b;
 64         }
 65      };
 66      map<int,char,myComp> m3; 
 67      //插入元素,按键值的由大到小放入黑白树中
 68      m3[25]='m';
 69      m3[28]='k'; 
 70      m3[10]='x';
 71      m3[30]='a';
 72      //使用前向迭代器中序遍历map
 73      for(map<int,char,myComp>::iterator it1=m3.begin();it1!=m3.end();it1++);
 74      {
 75          cout<<(*it1).first<<":"<<(*it1).second<<endl;
 76       } */
 77     //元素是结构体,可以直接把比较函数写在结构体内 
 78     /*struct Info
 79     {
 80         string name;
 81         float score;
 82         //重载"<"操作符,按score由大到小
 83         bool operator<(const Info &a) const
 84         {
 85               return a.score<score;
 86           }
 87     };
 88     map<Info,int> m4;
 89     //定义结构体变量
 90     Info info;
 91     info.name="Jack";
 92     info.score=60;
 93     m[info]=25;
 94     info.name="Bomi";
 95     info.score=80;
 96     m[info]=10;
 97     info.name="Peti";
 98     info.score=66.5;
 99     m[info]=30;
100     map<Info,int>::iterator it2;
101     for(it2=m4.begin();it2!=m4.end();it2++)
102     {
103         cout<<(*it2).second<<":";
104         cout<<((*it2).first).name<<((*it2).first.score<<endl;
105     }*/
106     //用map实现数字分离采用取余方法操作耗时,把数字当字符串使用 map映照功能很方便实现了数字分离
107     map<char,int> m5;
108     m5['0']=0;
109     m5['1']=1; 
110     m5['2']=2; 
111     m5['3']=3; 
112     m5['4']=4; 
113     m5['5']=5; 
114     m5['6']=6; 
115     m5['7']=7; 
116     m5['8']=8; 
117     m5['9']=9; 
118     /*上面的10条赋值语句也可采用下面这个循环来简化代码编写
119     for(int j=0;j<10;j++)
120     {
121          m['0'+j]=j;
122     }*/
123     string sa,sb;
124     sa="6234";
125     int i;
126     int sum=0;
127     for(i=0;i<sa.length();i++)
128     {
129         sum+=m5[sa[i]];
130     }
131     cout<<"sum="<<sum<<endl;
132     //数字映照字符的map写法
133     map<int,char> m6;
134     for(int j=0;j<10;j++)
135     {
136         m6[j]='0'+j;
137      } 
138      int n=7;
139      string s="The number is ";
140      cout<<s+m6[n]<<endl;
141      return 0;
142  } 

 

posted @ 2018-06-07 21:12  两点够吗  阅读(168)  评论(0编辑  收藏  举报