#include <algorithm>
#include <functional>
#include <iostream>
#include <string>
struct TeamStats {
std::string name;
float yards_per_game;
int total_points;
};
int main() {
std::vector<TeamStats> arr {
{ "Red", 100, 30, },
{ "Blue", 150, 10, },
{ "Green", 200, 20, },
};
// approach one, store the lambda before hand
auto sortByYards = [](const TeamStats& lhs, const TeamStats& rhs) -> bool {
return lhs.yards_per_game < rhs.yards_per_game;
};
std::sort(arr.begin(), arr.end(), sortByYards);
std::cout << "By yards:\n";
for (auto& it : arr) {
std::cout << it.yards_per_game << " " << it.name << "\n";
}
// approach two, write the lambda inline.
std::sort(arr.begin(), arr.end(), [](const TeamStats& lhs, const TeamStats& rhs) -> bool {
return lhs.total_points < rhs.total_points;
});
std::cout << "By points:\n";
for (auto& it : arr) {
std::cout << it.total_points << " " << it.name << "\n";
}
return 0;
}
CSNpbmNsdWRlIDxhbGdvcml0aG0+CgkjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxzdHJpbmc+CgkKCXN0cnVjdCBUZWFtU3RhdHMgewoJCXN0ZDo6c3RyaW5nIG5hbWU7CgkJZmxvYXQgeWFyZHNfcGVyX2dhbWU7CgkJaW50IHRvdGFsX3BvaW50czsKCX07CgkKCWludCBtYWluKCkgewoJCXN0ZDo6dmVjdG9yPFRlYW1TdGF0cz4gYXJyIHsKCQkJeyAiUmVkIiwgICAxMDAsIDMwLCB9LAoJCQl7ICJCbHVlIiwgIDE1MCwgMTAsIH0sCgkJCXsgIkdyZWVuIiwgMjAwLCAyMCwgfSwKCQl9OwoJCgkJLy8gYXBwcm9hY2ggb25lLCBzdG9yZSB0aGUgbGFtYmRhIGJlZm9yZSBoYW5kCgkJYXV0byBzb3J0QnlZYXJkcyA9IFtdKGNvbnN0IFRlYW1TdGF0cyYgbGhzLCBjb25zdCBUZWFtU3RhdHMmIHJocykgLT4gYm9vbCB7CgkJCXJldHVybiBsaHMueWFyZHNfcGVyX2dhbWUgPCByaHMueWFyZHNfcGVyX2dhbWU7CgkJfTsKCQlzdGQ6OnNvcnQoYXJyLmJlZ2luKCksIGFyci5lbmQoKSwgc29ydEJ5WWFyZHMpOwoJCXN0ZDo6Y291dCA8PCAiQnkgeWFyZHM6XG4iOwoJCWZvciAoYXV0byYgaXQgOiBhcnIpIHsKCQkJc3RkOjpjb3V0IDw8IGl0LnlhcmRzX3Blcl9nYW1lIDw8ICIgIiA8PCBpdC5uYW1lIDw8ICJcbiI7CgkJfQoJCQoJCS8vIGFwcHJvYWNoIHR3bywgd3JpdGUgdGhlIGxhbWJkYSBpbmxpbmUuCgkJc3RkOjpzb3J0KGFyci5iZWdpbigpLCBhcnIuZW5kKCksIFtdKGNvbnN0IFRlYW1TdGF0cyYgbGhzLCBjb25zdCBUZWFtU3RhdHMmIHJocykgLT4gYm9vbCB7CgkJCXJldHVybiBsaHMudG90YWxfcG9pbnRzIDwgcmhzLnRvdGFsX3BvaW50czsKCQl9KTsKCQlzdGQ6OmNvdXQgPDwgIkJ5IHBvaW50czpcbiI7CgkJZm9yIChhdXRvJiBpdCA6IGFycikgewoJCQlzdGQ6OmNvdXQgPDwgaXQudG90YWxfcG9pbnRzIDw8ICIgIiA8PCBpdC5uYW1lIDw8ICJcbiI7CgkJfQoJCgkJcmV0dXJuIDA7Cgl9