vector的应用

//算法笔记STL部分vector篇 
#include<iostream>
#include<cstdio> 
#include<vector>
#include<algorithm>
using namespace std;

const int M = 26*26*26*10+1;//一共有M种姓名组合的可能 (主营常量的定义方式与宏的定义方式的区别) 

vector<int> 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<int>::iterator it = s[getID(name)].begin(); it != s[getID(name)].end(); it++)
        {
            printf("%d ", *it);
        }
        printf("\n");
    }
    return 0;
}

 

posted @ 2018-11-05 20:23  justdoit~  阅读(268)  评论(0编辑  收藏  举报