#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;
bool compare_pop_up(const election& e1, const election& e2)
{
return e1.pop > e2.pop; // if e1.pop comes before e2.pop, return true, else false
}
int main()
{
election results[3];
results[0].pop = "abc";
results[1].pop = "123";
results[2].pop = "def";
bubblesort<election>(results, 3, compare_pop_up);
for (int i = 0; i < 3; ++i)
std::cout << results[i].pop << "\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBjbXA+CnZvaWQgYnViYmxlc29ydChUIGFyW10sIGludCBuLCBjbXAgY29tcGFyZV9mbikKewoJaW50IHN3YXBzID0gMTsKCXdoaWxlIChzd2FwcykKCXsKCQlzd2FwcyA9IDA7CgkJZm9yIChpbnQgaSA9IDA7IGkgPCBuIC0gMTsgaSsrKQoJCXsKCQkJaWYgKCFjb21wYXJlX2ZuKGFyW2ldLCBhcltpICsgMV0pKQoJCQl7CgkJCQlzdGQ6OnN3YXAoYXJbaV0sIGFyW2kgKyAxXSk7CgkJCQlzd2FwcyA9IDE7CgkJCX0KCQl9Cgl9Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGJ1YmJsZXNvcnQoVCBhcltdLCBpbnQgbikKewoJLy8gY2FsbCBnZW5lcmFsIHZlcnNpb24gdXNpbmcgPAoJYnViYmxlc29ydChhciwgbiwgc3RkOjpsZXNzPFQ+KCkpOwp9CgpzdHJ1Y3QgZWxlY3Rpb24KewoJc3RkOjpzdHJpbmcgcGFydHk7CglzdGQ6OnN0cmluZyBzdGF0ZTsKCXN0ZDo6c3RyaW5nIHBvcDsKCXN0ZDo6c3RyaW5nIHJlcHM7CglpbnQgcmF0aW87Cn07Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBjb21wYXJlX3BvcF91cChjb25zdCBlbGVjdGlvbiYgZTEsIGNvbnN0IGVsZWN0aW9uJiBlMikKewoJcmV0dXJuIGUxLnBvcCA+IGUyLnBvcDsgIC8vIGlmIGUxLnBvcCBjb21lcyBiZWZvcmUgZTIucG9wLCByZXR1cm4gdHJ1ZSwgZWxzZSBmYWxzZQp9CgppbnQgbWFpbigpCnsKCWVsZWN0aW9uIHJlc3VsdHNbM107CglyZXN1bHRzWzBdLnBvcCA9ICJhYmMiOwoJcmVzdWx0c1sxXS5wb3AgPSAiMTIzIjsKCXJlc3VsdHNbMl0ucG9wID0gImRlZiI7CgoJYnViYmxlc29ydDxlbGVjdGlvbj4ocmVzdWx0cywgMywgY29tcGFyZV9wb3BfdXApOwoKCWZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKQoJCXN0ZDo6Y291dCA8PCByZXN1bHRzW2ldLnBvcCA8PCAiXG4iOwp9