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 展开
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 展开
2个回答
展开全部
#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;
}
}
展开全部
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<<" ";
}
}
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<<" ";
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询