原创 关于map类型:书店问题和统计读入单词的数目

2011-3-2 22:06 1358 1 1 分类: 软件与OS

问题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;

}

   

 

 

 

 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
1
关闭 站长推荐上一条 /3 下一条