#include #include #include #include #include #include using namespace std; class Student { public: Student() = default; Student(string const & name, string const & surname, string const & pnr, int result, char grade) : name {name}, surname{surname}, pnr{pnr}, result{result}, grade{grade}, gn{} { if (grade != 'U') { gn = grade - '0'; } } bool operator<(Student const & rhs) const { if (gn < rhs.gn) return false; else if ( gn > rhs.gn ) return true; return (surname+name) < (rhs.surname+rhs.name); } string to_string() const { ostringstream oss; oss << setw(30) << left << (surname + ", " + name) << pnr << right << setw(8) << grade << " (" << setw(2) << result << ")"; return oss.str(); } private: string name{}; string surname{}; string pnr{}; int result{}; char grade{}; int gn{}; }; istream & operator>>(istream & is, Student & s) { string name,surname,pnr; int result; char grade; getline(is, name, ':'); getline(is, surname, ':'); getline(is, pnr, ':'); is >> result; is.ignore(); is.get(grade); is.ignore(); s = Student(name,surname,pnr,result,grade); return is; } ostream & operator<<(ostream & os, Student const & s) { return os << s.to_string(); } int main() { vector students; for ( Student s; cin >> s; ) { students.push_back(s); } sort(begin(students), end(students)); cout << setw(30) << left << "Namn" << "Personnummer Betyg (PoƤng)\n"; for ( Student const & s : students ) { cout << s << '\n'; } }