在这道题中,我们要读入若干个人的名字和考试成绩,然后你要对其进行 从小到大 排序之后再依次输出这些人名和成绩,并且输出它们的个数。
输入和输出的具体格式可以参照输入样例。排序规则为优先按照分数排序,如果分数相同的话则按照姓名的字典序排序。
输入格式:一共若干个人的姓名和成绩,每条占一行,格式为
人名 分数
输出格式:将所有成绩条目排序之后输出,每条占一行,格式与输入完全相同,然后在最后一行输出数字的总个数。
样例输入:
Alice 89 Bob 100 Selina 92 Dick 85 Fairy 85
样例输出:
Dick 85 Fairy 85 Alice 89 Selina 92 Bob 100 5
代码如下:
#include <iostream>
#include <vector>
#include <algorithm>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
using std::sort;
class student{
public:
student(const string& inname, const int& insource): name(inname), source(insource){
}
string getName() const
{
return this->name;
}
int getSource() const
{
return this->source;
}
private:
string name;
int source;
};
bool cmp(const student &a, const student &b){
if (a.getSource() > b.getSource()){
return false;
}else if (a.getSource() < b.getSource()){
return true;
}else{
//如果等于
if(a.getName() < b.getName()){
return true;
}else{
return false;
}
}
};
int main(){
vector<student> s;
int input;
string name;
while(cin >> name >> input){
s.push_back(student(name,input));
}
sort(s.begin(), s.end(), cmp);
for(int i = 0; i < s.size(); i++){
cout << s[i].getName() << " " << s[i].getSource() << endl;
if( i == s.size() - 1){
cout << s.size() << endl;
}
}
}