Map容器

                      Map容器
map类定义了一个关联容器,并且在容器中使用唯一的关键字来映射相应的值。

例如:
     A     0
            B     1
            C     2 
从本质上来说,关键字就是值的名字。在map对象中存储了一个值之后,就可以

通过关键字来获得它。map对象是一系列关键字/值的匹配对。
map的主要功能在于:只有你知道了一个值的关键字,就能够找到这个值。   例

如:
    定义一个map对象m,在该对象中使用人名作为关键字,并将每个人的电话号

码存储为值。那么可以使用
                      m[“张三”]
    表示张三的电话号码。
从前面的例子可以看出map类有一个非常优越的特点:关联数组。在普通的数组

中,索引是一个整数。而在关联数组中,索引是一个键,并且键可以是任意类型

的,可以是String、double、int类型,甚至可以是一些用户定义的类。
如: m[“张三”] = 8123456
定义一个map对象
 
             map<char, int>m;
定义一个map对象的迭代器
 
             map<char, int>::iterator p;
使用迭代器访问map
     
             p = m.begin();
             p++;
             p = m.end();
m.insert(pair<char, int> (‘A’, 0))

             p->first
             p->second查找map对象中的关键字
     
         p = m.find(‘H’) ;
         p -> first;
         p -> second;
使用map对象求下面问题:读取输入数据(文具,数量),输入以end结束。输出各

种文具(排序)的总数和总文具数量, 
    输入
    pen             17
    pencil         23
    rubber       38
    pen             15
    ruler           9
    compasses  20
    ruler           10
    end
输出
    compasses   20
    pen              32
    pencil          23
    rubber        38
    ruler           19
    total            132
程序代码为:
#include<iostream>
#include<map>
#include<fstream>
#include<string>
using namespace std;
void main()
{
    string str;
 int number,total=0;
    ifstream stream("input.txt");
 stream>>str>>number;
 total=number;
    //typedef map<string,int , less<int> > INT2STRING;
 //INT2STRING mp;
 map<string,int>mp;
 
    //mp.insert(INT2STRING::value_type(str,number));
   
 if(str!="end")
 {  
  map<string,int>::iterator p=mp.begin(),q=mp.begin();
    
        mp.insert(pair<string,int>(str,number));
     while(str!="end")
  {  
   stream>>str;
      if(str!="end")
   {
        
                stream>>number;
    total+=number;
          q=mp.find(str);
      if(q!=mp.end())
      {
           q->second+=number;
          
      }
     else
     {  
      p=mp.begin();
     for(int i=0;i<mp.size();i++)
     {
        
      if(p->first>str)
      {
               mp.insert

(p,pair<string,int>(str,number));
                           //p=mp.begin();
             break;
       }
          else if(p->first<str)
       {
               p++;
       }
     }//for
     if(i>=mp.size()){ mp.insert

(pair<string,int>(str,number));}
                
     }//else
     p=q=mp.begin();
   }//if
   else{  break;}
   
  }//while
  
 }//if
 map<string,int>::iterator m=mp.begin();
 for(int j=0;j<mp.size();j++)
 {
     cout<<m->first<<"  "<<m->second<<endl;
  m++;
 }
 cout<<"total"<<"  "<<total<<endl;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值