#include <iostream>
#include <vector>
#include <algorithm>
struct Point
{
float x, y;
Point(float x, float y) : x(x), y(y) {}
};
int main()
{
std::vector<Point> points = {
Point(-1.0f, 1.0f),
Point(1.0f, 1.0f),
Point(-2.0f, 1.0f),
Point(2.0f, 1.0f),
Point(4.0f, 2.0f),
Point(-4.0f, 2.0f),
Point(-8.0f, 2.0f),
Point(8.0f, 2.0f),
Point(0.0f, 3.0f)
};
std::sort(
points.begin(), points.end(),
[](const Point &lhs, const Point &rhs) {
if (lhs.x < rhs.x)
return true;
return false;
}
);
std::stable_sort(
points.begin(), points.end(),
[](const Point &lhs, const Point &rhs) -> bool {
if (lhs.y < rhs.y)
return true;
return false;
}
);
for (auto &p : points) {
std::cout << "(" << p.x << ", " << p.y << "), ";
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RydWN0IFBvaW50CnsKCWZsb2F0IHgsIHk7CglQb2ludChmbG9hdCB4LCBmbG9hdCB5KSA6IHgoeCksIHkoeSkge30KfTsKCmludCBtYWluKCkKewoJc3RkOjp2ZWN0b3I8UG9pbnQ+IHBvaW50cyA9IHsKCQlQb2ludCgtMS4wZiwgMS4wZiksCgkJUG9pbnQoMS4wZiwgMS4wZiksCgkJUG9pbnQoLTIuMGYsIDEuMGYpLAoJCVBvaW50KDIuMGYsIDEuMGYpLAoJCVBvaW50KDQuMGYsIDIuMGYpLAoJCVBvaW50KC00LjBmLCAyLjBmKSwKCQlQb2ludCgtOC4wZiwgMi4wZiksCgkJUG9pbnQoOC4wZiwgMi4wZiksCgkJUG9pbnQoMC4wZiwgMy4wZikKCX07CgkKCXN0ZDo6c29ydCgKCQlwb2ludHMuYmVnaW4oKSwgcG9pbnRzLmVuZCgpLAoJCVtdKGNvbnN0IFBvaW50ICZsaHMsIGNvbnN0IFBvaW50ICZyaHMpIHsKCQkJaWYgKGxocy54IDwgcmhzLngpCgkJCQlyZXR1cm4gdHJ1ZTsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCSk7CglzdGQ6OnN0YWJsZV9zb3J0KAoJCXBvaW50cy5iZWdpbigpLCBwb2ludHMuZW5kKCksCgkJW10oY29uc3QgUG9pbnQgJmxocywgY29uc3QgUG9pbnQgJnJocykgLT4gYm9vbCB7CgkJCWlmIChsaHMueSA8IHJocy55KQoJCQkJcmV0dXJuIHRydWU7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkpOwoJCglmb3IgKGF1dG8gJnAgOiBwb2ludHMpIHsKCQlzdGQ6OmNvdXQgPDwgIigiIDw8IHAueCA8PCAiLCAiIDw8IHAueSA8PCAiKSwgIjsKCX0KfQ==
(-2, 1), (-1, 1), (1, 1), (2, 1), (-8, 2), (-4, 2), (4, 2), (8, 2), (0, 3),