问题遇到的现象和发生背景
这段代码中,mp[str.substr(index,5)]好像并没有初始化就直接在循环中进行了递增操作,我尝试在中间printf,发现其初值为0,请问为什么mp的值一开始是0呢?是在我没有看出来的地方把这些键的值都初始化为0过了,还是map的值为int型时初值都为0,还是其他什么原因呢?
问题相关代码,请勿粘贴截图
#include <iostream>
#include<cstdio>
#include <string>
#include <queue>
#include <map>
using namespace std;
struct myTask{
string name;
int priority;
friend bool operator <(const myTask &t1,const myTask &t2)
{
if(t1.priority==t2.priority) return t1.name>t2.name;
else return t1.priority>t2.priority;
}
};
map<string,int> mp;
priority_queue<myTask> q;
void myfun(string &str)
{
myTask mytask;
mytask.name=str.substr(0,5);
if(str[6]!='N')
{
int index=5;
while(str[index]!=')')
{
index++;
mp[str.substr(index,5)]++;
index+=5;
}
}
mytask.priority=mp[mytask.name];
q.push(mytask);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
string str;
cin>>str;
myfun(str);
}
int len=q.size();
for(int i=0;i<len;i++)
{
string temp;
temp=q.top().name;
q.pop();
if(i<len-1) cout<<temp<<" ";
else cout<<temp;
}
}
}