c++stl容器问题

使用STL中的map结构进行关键字的统计:map<string,int>m;m[“A”]++;m[“B”]++;m[“A”]++;统计完成后通过迭代器map<string... 使用STL中的map结构进行关键字的统计:
map<string,int> m;
m[“A”]++;
m[“B”]++;
m[“A”]++;
统计完成后通过迭代器map<string,int>::iterator遍历map容器找出热词的频数。
例如输入
6
a a a b b 1
输出3 a 也就是频数为3 热词是a
展开
 我来答
IT孤鹜
推荐于2016-01-03 · TA获得超过4198个赞
知道大有可为答主
回答量:3960
采纳率:71%
帮助的人:3573万
展开全部
#include<iostream>
#include<map>
#include<string>
using namespace std;
void main()
{
    map<string,int> m;
    int n;
    string str,maxstr;
    while(cin>>n)
    {
        getchar();
        for(int i=0;i<n;i++)
        {
            cin>>str;
            if(!m[str])
                m[str]=1;
            else
                m[str]++;
        }
        map<string,int>::iterator it=m.begin();
        maxstr = it->first;
        for(;it!=m.end();it++)
        {
            if(m[maxstr]<it->second) maxstr=it->first;
        }
        cout<<maxstr<<" "<<m[maxstr]<<endl;
    }
}

 

更多追问追答
追问
为什么继续输下去会累积?例如
4
a a a c
a 3
5
a a v v v
a 5?
还有输入
6
a a a b b b
应该是
a b 3?为什么您的是a 3?
追答
//完整代码,请采纳!

#include<iostream>
#include<map>
#include<string>
using namespace std;
void main()
{
    map<string,int> m;
    int n;
    string str,maxstr;
    while(cin>>n)
    {
        getchar();
        m.clear();
        for(int i=0;i<n;i++)
        {
            cin>>str;
            if(!m[str])
                m[str]=1;
            else
                m[str]++;
        }
        map<string,int>::iterator it=m.begin();
        maxstr = it->first;
        for(;it!=m.end();it++)
        {
            if(m[maxstr]<it->second) maxstr=it->first;
        }
        for(it=m.begin();it!=m.end();it++)
            if(m[maxstr]==it->second)
               cout<<it->first<<" "<<it->second<<endl;
    }
}
hu0904
2014-05-27 · TA获得超过222个赞
知道小有建树答主
回答量:510
采纳率:0%
帮助的人:460万
展开全部
struct _tcount{
int v;
_tcount():v(0){}
_tcount&operator++(){
++v;
return *this;
}
_tcount operator++(int){
_tcount ret;
ret.v=v;
++v;
return ret;
};//如果直接使用++ 则需自定义类初始化数据为0,否则要先查找是否已有该键值
map<string,_tcount> m;
//输入。。
int maxv=0;
for(auto p:m){
if(maxv<p.second.v){
maxv=p.second.v;
}
}
cout<<maxv<<" ";
for(auto p:m){
if(maxv==p.second.v){
cout<<p.frist<<" ";
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式