#include <algorithm>
#include <iostream>
#include <string>
#include <tuple>
#include <vector>
struct Person
{
std::string firstName;
std::string lastName;
int age;
bool operator<(const Person &other) const
{
return std::tie(lastName, firstName, age)
< std::tie(other.lastName, other.firstName, other.age);
}
};
void print(const std::string& title, const std::vector<Person> &people)
{
std::cout << title << "\n";
for (const Person &person : people)
{
std::cout << person.lastName << ", "
<< person.firstName << ", "
<< person.age << "\n";
}
}
int main()
{
std::vector<Person> people {
{ "Bill", "Gates", 44 },
{ "Gates", "Bill", 44 },
{ "Back", "Gates", 43 },
{ "Front", "Gates", 44 },
{ "Bill", "Gates", 43 },
{ "Gates", "Bill", 43 },
{ "Back", "Gates", 44 },
{ "Front", "Gates", 43 },
};
print("Before Sort:", people);
std::sort(people.begin(), people.end());
print("After Sort:", people);
return 0;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dHVwbGU+CiNpbmNsdWRlIDx2ZWN0b3I+CgpzdHJ1Y3QgUGVyc29uCnsKICAgIHN0ZDo6c3RyaW5nIGZpcnN0TmFtZTsKICAgIHN0ZDo6c3RyaW5nIGxhc3ROYW1lOwogICAgaW50IGFnZTsKCiAgICBib29sIG9wZXJhdG9yPChjb25zdCBQZXJzb24gJm90aGVyKSBjb25zdAogICAgewogICAgICAgIHJldHVybiBzdGQ6OnRpZShsYXN0TmFtZSwgZmlyc3ROYW1lLCBhZ2UpCiAgICAgICAgICAgIDwgc3RkOjp0aWUob3RoZXIubGFzdE5hbWUsIG90aGVyLmZpcnN0TmFtZSwgb3RoZXIuYWdlKTsKICAgIH0KfTsKCnZvaWQgcHJpbnQoY29uc3Qgc3RkOjpzdHJpbmcmIHRpdGxlLCBjb25zdCBzdGQ6OnZlY3RvcjxQZXJzb24+ICZwZW9wbGUpCnsKICAgIHN0ZDo6Y291dCA8PCB0aXRsZSA8PCAiXG4iOwogICAgZm9yIChjb25zdCBQZXJzb24gJnBlcnNvbiA6IHBlb3BsZSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgcGVyc29uLmxhc3ROYW1lIDw8ICIsICIgCiAgICAgICAgICAgIDw8IHBlcnNvbi5maXJzdE5hbWUgPDwgIiwgIiAKICAgICAgICAgICAgPDwgcGVyc29uLmFnZSA8PCAiXG4iOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6dmVjdG9yPFBlcnNvbj4gcGVvcGxlIHsKICAgICAgICB7ICJCaWxsIiwgIkdhdGVzIiwgNDQgfSwKICAgICAgICB7ICJHYXRlcyIsICJCaWxsIiwgNDQgfSwKICAgICAgICB7ICJCYWNrIiwgIkdhdGVzIiwgNDMgfSwKICAgICAgICB7ICJGcm9udCIsICJHYXRlcyIsIDQ0IH0sCiAgICAgICAgeyAiQmlsbCIsICJHYXRlcyIsIDQzIH0sCiAgICAgICAgeyAiR2F0ZXMiLCAiQmlsbCIsIDQzIH0sCiAgICAgICAgeyAiQmFjayIsICJHYXRlcyIsIDQ0IH0sCiAgICAgICAgeyAiRnJvbnQiLCAiR2F0ZXMiLCA0MyB9LAogICAgfTsKCiAgICBwcmludCgiQmVmb3JlIFNvcnQ6IiwgcGVvcGxlKTsKICAgIHN0ZDo6c29ydChwZW9wbGUuYmVnaW4oKSwgcGVvcGxlLmVuZCgpKTsKICAgIHByaW50KCJBZnRlciBTb3J0OiIsIHBlb3BsZSk7CgogICAgcmV0dXJuIDA7Cn0=
Before Sort:
Gates, Bill, 44
Bill, Gates, 44
Gates, Back, 43
Gates, Front, 44
Gates, Bill, 43
Bill, Gates, 43
Gates, Back, 44
Gates, Front, 43
After Sort:
Bill, Gates, 43
Bill, Gates, 44
Gates, Back, 43
Gates, Back, 44
Gates, Bill, 43
Gates, Bill, 44
Gates, Front, 43
Gates, Front, 44