//算法笔记STL部分vector篇 #include#include #include #include using namespace std;const int M = 26*26*26*10+1;//一共有M种姓名组合的可能 (主营常量的定义方式与宏的定义方式的区别) vector s[M];//每个vector对应每个学生的选课情况 int getID(char name[])//使用hash函数将每个学生姓名对应的id计算出来 //1.定义hash函数 { int id = 0; for(int i = 0; i < 3; i++) { id = id *26 + name[i] - 'A'; } id = id * 10 + name[3] - '0'; return id; }int main(){ int student, course;//student代表学生人数,course代表课程数 char name[5];//用于输入每个学生的姓名 int course_i, student_size;//course_i代表第i门课,student_size代表第i门课的学生人数 scanf("%d%d", &student, &course); for(int i = 0; i < course; i++)//让每个学生选的课加入到此学生对应id的vector中 //2.让每个学生选的课加入到此学生对应id的vector中 { scanf("%d%d", &course_i, &student_size); for(int j = 0; j < student_size; j++) { scanf("%s", name); s[getID(name)].push_back(course_i); } } for(int i = 0; i < student; i++)//对学生信息进行输出 //3.对学生信息排序后输出 { scanf("%s", name); int n = s[getID(name)].size(); printf("%s %d ", name, n); sort(s[getID(name)].begin(), s[getID(name)].end()); for(vector ::iterator it = s[getID(name)].begin(); it != s[getID(name)].end(); it++) { printf("%d ", *it); } printf("\n"); } return 0;}