#include <iterator>
#include <iostream>
#include <algorithm>
#include <string>
#include <limits>
class Student
{
public:
Student(int id,int score)
:m_id(id)
,m_score(score)
{
}
bool operator <(const Student& other)
{
return m_score<other.m_score;
}
bool operator ==(const Student& other)
{
return m_id==other.m_id;
}
int m_id,m_score;
};
std::ostream& operator<<(std::ostream& o,const Student& s)
{
o<<"id: "<<s.m_id<<" score: "<<s.m_score;
return o;
}
int main(int argc, char *argv[])
{
std::cout<<"a [id] [score] to add\n"
"d [id] to delete\n"
"f [id] to find\n"
"s to sort\n"
"p to print\n"
"q to quit\n"<<std::endl;
char status;
int id=0,score=0;
std::vector<Student> students;
bool done=false,errorFlag=false;
do{
std::cin>>status;
switch(status){
case 'q':
done=true;
break;
case 'a':
std::cin>>id>>score;
students.push_back(Student(id,score));
std::cout<<id<<" added.";
break;
case 'd':
{
std::cin>>id;
Student s(id,-1);
std::vector<Student>::iterator itr=std::find(students.begin(),students.end(),s);
if(itr!=students.end()){
students.erase(itr);
std::cout<<id<<" deleted.";
}
else
std::cout<<"student ["<<id<<"] do not exists!";
}
break;
case 'f':
{
std::cin>>id;
Student s(id,-1);
std::vector<Student>::iterator itr=std::find(students.begin(),students.end(),s);
if(itr==students.end())
std::cout<<"student ["<<id<<"] do not exists!";
else
std::cout<<*itr<<" finded.";
}
break;
case 's':
std::sort(students.begin(),students.end());
std::cout<<"sort end!";
break;
case 'p':
std::copy(students.begin(),students.end(),std::ostream_iterator<Student>(std::cout,"\n"));
std::cout<<"print end!";
break;
default:
errorFlag=true;
}
if(errorFlag||std::cin.fail()){
errorFlag=false;
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cout<<"error when input.";
}
std::cout<<std::endl;
}while(!done);
std::cout<<"bye!"<<std::endl;
}