一、答案
#include <iostream>
#include <vector>
#include <map>
#include <string>
#include <algorithm>
using namespace std;
bool comp(string a,string b)
{
return a<b;
}
map<int,vector<string>> all_c;
int main()
{
int stu_n,c_n;
cin>>stu_n>>c_n;
for(int i=0;i<stu_n;i++){
string name;
name.resize(4);
int num;
scanf("%s %d",&name[0],&num);
for(int j=0;j<num;j++){
int c_id=0;
cin>>c_id;
if(all_c.find(c_id)!=all_c.end()){
all_c[c_id].push_back(name);
}else{
vector<string> new_course;
all_c[c_id]=new_course;
all_c[c_id].push_back(name);
}
}
}
for(int i=1;i<=c_n;i++){
sort(all_c[i].begin(),all_c[i].end(),comp);
printf("%d %d\n",i,all_c[i].size());
for(int j=0;j<all_c[i].size();j++){
printf("%s\n",all_c[i][j].c_str());
}
}
return 0;
}
二、值得记录的知识点
1. 利用scanf输入数据到string:
string name;
name.resize(4);
int num;
scanf("%s %d",&name[0],&num);
2. 利用printf输出string:
printf("%s\n",all_c[i][j].c_str());