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了呢?求大神解答! 展开
 我来答
sssworld
2018-02-06 · TA获得超过160个赞
知道小有建树答主
回答量:89
采纳率:86%
帮助的人:32.9万
展开全部

你应该说的是:

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啊,怎么回事
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式