#include <iostream>
#include <string>
#include <functional>
#include <algorithm>
template <typename T, typename cmp>
void bubblesort(T ar[], int n, cmp compare_fn)
{
int swaps = 1;
while (swaps)
{
swaps = 0;
for (int i = 0; i < n - 1; i++)
{
if (!compare_fn(ar[i], ar[i + 1]))
{
std::swap(ar[i], ar[i + 1]);
swaps = 1;
}
}
}
}
template <typename T>
void bubblesort(T ar[], int n)
{
// call general version using <
bubblesort(ar, n, std::less<T>());
}
struct election
{
std::string party;
std::string state;
std::string pop;
std::string reps;
int ratio;
};
using namespace std;
int main()
{
election results[3];
results[0].pop = "abc";
results[1].pop = "123";
results[2].pop = "def";
bubblesort<election>(results, 3, [&](const election& e1, const election& e2) { return e1.pop < e2.pop; });
for (int i = 0; i < 3; ++i)
std::cout << results[i].pop << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBjbXA+CnZvaWQgYnViYmxlc29ydChUIGFyW10sIGludCBuLCBjbXAgY29tcGFyZV9mbikKewoJaW50IHN3YXBzID0gMTsKCXdoaWxlIChzd2FwcykKCXsKCQlzd2FwcyA9IDA7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQoJCXsKCQkJaWYgKCFjb21wYXJlX2ZuKGFyW2ldLCBhcltpICsgMV0pKQoJCQl7CgkJCQlzdGQ6OnN3YXAoYXJbaV0sIGFyW2kgKyAxXSk7CgkJCQlzd2FwcyA9IDE7CgkJCX0KCQl9Cgl9Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGJ1YmJsZXNvcnQoVCBhcltdLCBpbnQgbikKewoJLy8gY2FsbCBnZW5lcmFsIHZlcnNpb24gdXNpbmcgPAoJYnViYmxlc29ydChhciwgbiwgc3RkOjpsZXNzPFQ+KCkpOwp9CgpzdHJ1Y3QgZWxlY3Rpb24KewoJc3RkOjpzdHJpbmcgcGFydHk7CglzdGQ6OnN0cmluZyBzdGF0ZTsKCXN0ZDo6c3RyaW5nIHBvcDsKCXN0ZDo6c3RyaW5nIHJlcHM7CglpbnQgcmF0aW87Cn07Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmludCBtYWluKCkKewoJZWxlY3Rpb24gcmVzdWx0c1szXTsKCXJlc3VsdHNbMF0ucG9wID0gImFiYyI7CglyZXN1bHRzWzFdLnBvcCA9ICIxMjMiOwoJcmVzdWx0c1syXS5wb3AgPSAiZGVmIjsKCglidWJibGVzb3J0PGVsZWN0aW9uPihyZXN1bHRzLCAzLCBbJl0oY29uc3QgZWxlY3Rpb24mIGUxLCBjb25zdCBlbGVjdGlvbiYgZTIpIHsgcmV0dXJuIGUxLnBvcCA8IGUyLnBvcDsgfSk7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpCgkJc3RkOjpjb3V0IDw8IHJlc3VsdHNbaV0ucG9wIDw8ICJcbiI7Cn0K