More actions
imported>Unknown No edit summary |
(Table transclusion repair v1) |
||
| (One intermediate revision by the same user not shown) | |||
| Line 2: | Line 2: | ||
= Info = | = Info = | ||
작성일 : 2005 08 01 | |||
수정회수 : 0회 | 수정회수 : 0회 | ||
구현특이사항 | 구현특이사항 | ||
map이용 | map이용 | ||
미구현부분 | 미구현부분 | ||
총점 sort | 총점 sort | ||
= Input Text = | = Input Text = | ||
| Line 39: | Line 39: | ||
double accu(const vector<int>&) = total); | double accu(const vector<int>&) = total); | ||
int main(int argc, char *argv | int main(int argc, char *argv[]) { | ||
string line; | string line; | ||
vector<string> token; | vector<string> token; | ||
| Line 63: | Line 63: | ||
for(int i=0; i != line.size(); i++) { | for(int i=0; i != line.size(); i++) { | ||
if (line | if (line[i] == ' ') { | ||
ret.push_back(line.substr(beg, quantity)); | ret.push_back(line.substr(beg, quantity)); | ||
beg=i+1; | beg=i+1; | ||
| Line 74: | Line 74: | ||
bool save_map(vector<string>& input, map< string, vector<int> >& grades) { | bool save_map(vector<string>& input, map< string, vector<int> >& grades) { | ||
for (int i = 1; i != input.size(); i++) { | for (int i = 1; i != input.size(); i++) { | ||
grades | grades[input[0]].push_back(atoi(input[i].c_str())); | ||
} | } | ||
return true; | return true; | ||
| Line 105: | Line 105: | ||
= Result = | = Result = | ||
result.jpg | |||
= Idle Talk = | = Idle Talk = | ||
| Line 114: | Line 114: | ||
주말에 class 를 이용해서 다시 작성해볼 예정 | 주말에 class 를 이용해서 다시 작성해볼 예정 | ||
Latest revision as of 12:46, 27 March 2026
Info
작성일 : 2005 08 01 수정회수 : 0회 구현특이사항
map이용
미구현부분
총점 sort
Input Text
김철수 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
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
#include <map>
#include <vector>
#include <algorithm>
#include <numeric>
using namespace std;
vector<string> tokenize(const string& line);
bool save_map(vector<string>&, map< string, vector<int> >&);
double total(const vector<int>&);
bool print_report(ostream&,
const map< string, vector<int> >,
double accu(const vector<int>&) = total);
int main(int argc, char *argv[]) {
string line;
vector<string> token;
map< string, vector<int> > 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<string> tokenize(const string& line) {
string word;
vector<string> 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<string>& input, map< string, vector<int> >& 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<int>& grades) {
return accumulate(grades.begin(), grades.end(), 0.0);
}
bool print_report(ostream& os,
const map< string, vector<int> > record,
double accu(const vector<int>&)) {
for(map< string, vector<int> >::const_iterator iter = record.begin();
iter != record.end();
iter++) {
os<<iter->first<<'\t';
for(vector<int>::const_iterator grades = (iter->second).begin();
grades != (iter->second).end();
++grades)
cout<<*grades<<'\t';
cout<<accu(iter->second)<<'\t';
cout<<accu(iter->second)/(iter->second.size())<<'\t';
cout<<endl;
}
return true;
}
Result
result.jpg
Idle Talk
쩝.. -_-;; map 을 써봐야한다는 강박관념때문에 쓰기는 했는데.. -_-;; spec에 sort가있었다. ;; 아무래도 다시 짜는게 더 나을 것 같다. 짜고서 느낀건;;
- sorting 이 안되는 것이 map 의 단점이다. ㅡ,.ㅡ; 그야말로 검색할때만 좋은 것 같다.
- 다른 컨테이너와 기본적인 DS의 골격가 다르기 때문에 치환정도로는 DS의 변경이 안된다.
주말에 class 를 이용해서 다시 작성해볼 예정