问题1::某书店以文件形式保存每一笔交易,每一笔交易记录某本书的销售情况,含ISBN(国际标准书号,世界上每种图书的唯一标识符),销售册数和销售单价.店主定期查看这个文件,统计每本书的销售册数,总销售收入以及平均售价.
解决方案:可以增加一个名为ISBN的类型,封装与国际标准图书编号相关的规则.在实现中,国际标准图书编号是string类型,可做比较运算以确定编号之间的大小关系.因此,isbn类型可以支持<运算.假设已经定义了这样的类型,则可定义一个map对象,以isbn类型的对象为索引,其所有元素都存储了一个关联的sales_item类类型实例.
问题2:1)编写程序统计输出所读入的单词出现的次数
解决方案一:
建议一个map对象,保存读入的单词及出现次数(以单词为键,对应的值为单词的出现次数).
对于map容器,如果下标所表示的键在容器中不存在,则添加新元素
#include <iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<string,int>wordcount;
string word;
cout<<"Enter some words(Ctrl+Z to end):'
<<endl;
while(cin>>word)
++wordcount[word];
cout<<"word\t\t"<<"time"<<endl;
for(map<string,int>::iterator iter =wordcount.begin();
iter !=wordcount.end();++iter)
cout<<(*iter).first<<"\t\t" //可以用箭头操作符代替解引用和点操作符iter->first
<<(*iter).second<<endl;
return 0;
}
解决方案二:
用insert函数代替下标运算.
#include<iostream>
#include<map>
#include<utility>
#include<string>
using namespace std;
int main()
{
map<string,int>wordcount;
string word;
//读入单词并统计其出现的次数
cout<<"Enter some word(Ctrl+Z to end):"
<<endl;
while(cin>>word)
pair<map<string,int>::iterator,bool>ret =
wordcount.insert(make_pair(word,1));
if(!ret.second) //该单词已在容器中存在
++ret.first->second//该单词的出现次数增加1,ret是pair类型,ret.first是map迭代器,->是迭代器解引用
}
cout<<"Word\t\t"<<"times"<<endl;
for(map<string,int>::iterator iter=wordcount.begin();
iter!=wordcount.end();++iter)
cout<<(*iter).first<<"\t\t"
<<(*iter).second<<endl;
return 0;
}
文章评论(0条评论)
登录后参与讨论