1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
|
#include <iostream>
#include <string>
#include <vector>
#include <utility> // for std::pair
#include <limits>
#include <algorithm> // for std::sort
bool sort_pairfirst_desc(std::pair<std::string, double> i, std::pair<std::string, double> j)
{
return (i.first > j.first);
}
bool sort_pairsecond_asc(std::pair<std::string, double> i, std::pair<std::string, double> j)
{
return (i.second < j.second);
}
bool sort_pairsecond_desc(std::pair<std::string, double> i, std::pair<std::string, double> j)
{
return (i.second > j.second);
}
int main()
{
std::vector<std::pair<std::string, double>> students;
std::pair<std::string, double> student;
while (true)
{
std::string name;
std::cout << "Enter the name of the student (QUIT to quit): ";
std::getline(std::cin, name);
if ("QUIT" == name)
{
break;
}
double score;
std::cout << "Enter the student's score: ";
std::cin >> score;
student = std::make_pair(name, score);
students.push_back(student);
// flush the input buffer
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
std::cout << '\n';
std::cout << "The unsorted list:\n";
for (auto it : students)
{
std::cout << it.first << ":\t"<< it.second << '\n';
}
std::sort(students.begin(), students.end());
std::cout << "\nThe default sorted list:\n";
for (auto it : students)
{
std::cout << it.first << ":\t" << it.second << '\n';
}
std::sort(students.begin(), students.end(), sort_pairfirst_desc);
std::cout << "\nThe descending name sorted list:\n";
for (auto it : students)
{
std::cout << it.first << ":\t" << it.second << '\n';
}
std::sort(students.begin(), students.end(), sort_pairsecond_asc);
std::cout << "\nThe ascending score sorted list:\n";
for (auto it : students)
{
std::cout << it.first << ":\t" << it.second << '\n';
}
std::sort(students.begin(), students.end(), sort_pairsecond_desc);
std::cout << "\nThe descending score sorted list:\n";
for (auto it : students)
{
std::cout << it.first << ":\t" << it.second << '\n';
}
}
|