[[TableOfContents]] = Info = {{|작성일 : 2005 08 01 수정회수 : 0회 구현특이사항 map이용 미구현부분 총점 sort|}} = Input Text = {{{~cpp 김철수 59 98 75 91 마동탁 66 78 77 84 박민철 52 50 63 72 신순이 97 55 52 97 송영이 78 82 63 73 양민수 72 66 73 52 장준구 95 62 94 53 최호민 78 53 74 75 태석호 66 82 82 94 한노라 86 65 62 68 }}} = Code = {{{~cpp #include #include #include #include #include #include #include #include using namespace std; vector tokenize(const string& line); bool save_map(vector&, map< string, vector >&); double total(const vector&); bool print_report(ostream&, const map< string, vector >, double accu(const vector&) = total); int main(int argc, char *argv[]) { string line; vector token; map< string, vector > grades; ifstream fin("input.txt"); while(getline(fin, line)) { token = tokenize(line); save_map(token, grades); } print_report(cout, grades); system("PAUSE"); return EXIT_SUCCESS; } vector tokenize(const string& line) { string word; vector ret; int beg=0; int quantity=0; for(int i=0; i != line.size(); i++) { if (line[i] == ' ') { ret.push_back(line.substr(beg, quantity)); beg=i+1; quantity=0; } else ++quantity; } return ret; } bool save_map(vector& input, map< string, vector >& grades) { for (int i = 1; i != input.size(); i++) { grades[input[0]].push_back(atoi(input[i].c_str())); } return true; } double total(const vector& grades) { return accumulate(grades.begin(), grades.end(), 0.0); } bool print_report(ostream& os, const map< string, vector > record, double accu(const vector&)) { for(map< string, vector >::const_iterator iter = record.begin(); iter != record.end(); iter++) { os<first<<'\t'; for(vector::const_iterator grades = (iter->second).begin(); grades != (iter->second).end(); ++grades) cout<<*grades<<'\t'; cout<second)<<'\t'; cout<second)/(iter->second.size())<<'\t'; cout<