关键词:vector , map
试题链接:
https://www.nowcoder.com/questionTerminal/a6e370ac55fc4bd49d0bb62710e35868
问题描述:
思路:
这道题的核心就是变长数组vector的应用(以及map的应用),做题之前应当好好考虑一下vector该用在存储什么变量是最合适的,考虑它“长度可变”的特性让自己结题的过程变得更加简单。
备注:
使用algorithm中的sort函数对vector中的数据进行排序时,应当用到begin()和end()函数,而不是像对普通数组那样直接(头指针,头指针+数组长度)。
解决方案:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<map>
using namespace std;
int main(){
int courseNum;
int studentNum;
map<string,vector<int> > stumap;
int course,num;
char name[5];
cin>>studentNum>>courseNum;
for(int i=0;i<courseNum;i++){
cin>>course>>num; //课程号和选该课程的学生人数
//第一次出现该学生的名字
for(int j=0;j<num;j++){
cin>>name;
if(stumap.count(name)==0){
vector<int> list;
list.push_back(course);
stumap[name]=list;
//非第一次出现学生名字
}else{
stumap[name].push_back(course);
}
}
}
//学生顺序
for(int i=0;i<studentNum;i++){
cin>>name;
cout<<name<<" "<<stumap[name].size()<<" ";
//给课程号排序
sort(stumap[name].begin(),stumap[name].end());
for(int j=0;j<stumap[name].size();j++){
cout<<stumap[name][j]<<" ";
}
cout<<endl;
}
return 0;
}