c++中的map函数问题,求高手解答我的疑惑
#include<bits/stdc++.h>usingnamespacestd;map<string,int>q;intmain(){intx,y;scanf("%d%...
#include <bits/stdc++.h>using namespace std;map<string,int> q;int main(){ int x,y; scanf("%d%d",&x,&y); char m[1006][1006],n[1006][1006]; for(int i=0; i<y; i++) { int flag=0; scanf("%s %s",m[i],n[i]); for(int j=0; j<i; j++) { if(strcmp(m[j],m[i])==0&&strcmp(n[j],n[i])==0) { flag=1; break; } if(strcmp(m[j],n[i])==0&&strcmp(n[j],m[i])==0) { flag=1; break; } } if(flag==1)continue; q[m[i]]++; q[n[i]]++; } int max=0; for(int i=0; i<y; i++) { if(q[m[i]]>max)max=q[m[i]]; if(q[n[i]]>max)max=q[n[i]]; } printf("%d\n",max); return 0;}源代码如上。我想知道map p。在for循环中p[m[i]]++,是怎么运行的。这个代码,主要解决的问题就是找朋友的问题,就是这m个关系中朋友最多的数目有多少。我只想了解p[m[i]]这个东西是怎么++的,就是比如这个Andy怎么就加成3了呢?求大神解答!
展开
1个回答
展开全部
你应该说的是:
map <string,int> q;
map的[]取值,有一个特性,对于上面的q来说,
q[i]++;
找不到对应的关键值i时,它首先会执行
q[i] = 初始值;
其中,初始值对int、double一类的系统预定义类型,是取0,对于类,是直接调用无参构造函数。比如上面的实际执行效果为:
q[i] = 0;
然后,才会执行
q[i]++;
这一句。
以后再执行同样i值的上面这一句时,就不会再次赋初值了。
整个输入数据中,Andy一共在4行中出现,排除重复的一行,一共出现3次,故Andy最后的朋友数为3。
追问
我大致明白了。但就我这个程序而言,在for循环i=0,j=0时,(q[m[i]]++;q[n[i]]++;)这个
程序块并没有执行啊,就是andy和bob并没有变成1啊,因为m[0]和m[0],n[0]和n[0]一定相等,所以continue继续循环了。在i=2时,就是重复的那一行,又continue继续循环了,也没++。最后得出的结果应该是Andy是2啊,怎么回事
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询