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;
}