#include <codecvt> #include <iostream> #include <algorithm> #include <string> #include <vector> using namespace std; class Grade { private: /* data */ public: Grade(/* args */); ~Grade(); string m_Name; int number; int m_Grade; }; Grade::Grade(/* args */) = default; Grade::~Grade() { } void foreach (vector<Grade> &V) { auto iter = V.begin(); while (iter != V.end()) { cout << (*iter).m_Name << ' ' << (*iter).m_Grade <<endl; iter++; } } bool cmp(Grade &num1, Grade &num2) { //desc if (num1.m_Grade == num2.m_Grade) return num1.number < num2.number;//降序 else return num1.m_Grade > num2.m_Grade; } bool cmp1(Grade &num1, Grade &num2) { //asc if (num1.m_Grade == num2.m_Grade) return num1.number < num2.number;//升序 else return num1.m_Grade < num2.m_Grade; } int main() { int a, b; vector<Grade> v1; // cout << "enter a b:\n"; while (cin >> a) { v1.clear(); cin >> b; cin.get(); int Number = 0; while (a--) { // cout << "str1 num:\n"; Grade g; cin >> g.m_Name >> g.m_Grade; g.number=Number; Number++; v1.push_back(g); } if (b == 1) sort(v1.begin(), v1.end(), cmp1); else sort(v1.begin(), v1.end(), cmp); foreach(v1); } return 0; }