用map<int,int>关联容器以及迭代器实现遍历实现统计那个数出现次数最多
1 #include <iostream> 2 #include <map> 3 using namespace std; 4 int main() 5 { 6 map<int,int> m; 7 int n,v; 8 cin>>n; //这比如输入3 9 cout<<m[v]<<endl; 10 for(int i=0;i<n;i++){ //这里就循环三次 11 cin>>v; //这里就需要输入三个数 12 m[v]++; //如果依次输入的是2 3 3则m[2]=1,m[3]=1,m[3]=2 13 cout<<m[v]<<endl; 14 } 15 int ans,count=0; 16 for(map<int,int>::iterator it=m.begin();it!=m.end();it++) 17 if(it->second>count){ 18 count=it->second; //这里的it->second是指map<int,int>中的后面的value值 19 ans=it->first; //it—>first是指map<int,int>中的后面的key值 20 } 21 cout<<ans<<endl; 22 return 0; 23 }
map<int,int> m;
int n,v;
cin>>n; //这比如输入3
cout<<m[v]<<endl;
for(int i=0;i<n;i++){ //这里就循环三次
cin>>v; //这里就需要输入三个数
m[v]++; //如果依次输入的是2 3 3则m[2]=1,m[3]=1,m[3]=2
cout<<m[v]<<endl;
}
- 这里要说一下map<int,int>是一c++中关联容器的一种,在这里可以看成一个键值对,键值对就是key:value的形式(列如“pig”:“女神”)。m[v]的初始值默认为0。这里m[v]是map中额value。然后m[v]中的v如果是同一个就会按代码上的++。所以如果依次输入的是2 3 3则m[2]=1,m[3]=1,m[3]=2。按照这个第二次输如的3,因为之前没有过。所以为m[v]=1,然后第三个数进来,还是3,因为此时的key为3的已经有了。所以此时的m[v]为2
int ans,count=0;
for(map<int,int>::iterator it=m.begin();it!=m.end();it++)
if(it->second>count){
count=it->second; //这里的it->second是指map<int,int>中的后面的value值
ans=it->first; //it—>first是指map<int,int>中的后面的key值
}
- 这里是用的一个迭代器。详情看c++相关知识
- begin()+end()是迭代器的相关函数,代表开始和结束
- it->first指map里面的key(即前面的值)
- it->second值map里面的value(后边的值)
- 然后ans为统计之后的最高值
along