First I will describe using constructors in C++.
Now using comparators in C++
http://www.cprogramming.com/tutorial/operator_overloading.html
Final Code:
struct point { int x, y; point() {} // default constructor point (int _x, int _y) { x = _x; y = _y; } }; // Note that in C++, You do not need to use typedef as it is already typedefed to point, So you do need to use // typedef for that.Another way
struct point { int x, y; point() {} // default constructor point (int x, int y): x(x), y(y) {} };
Now using comparators in C++
struct point { int x, y; point() {} point (int x, int y) : x(x), y(y) {} // overloading of < operator bool operator<(const point &rhs) const{ // your main logic for the comparator goes here return make_pair(y,x) < make_pair(rhs.y, rhs.x); }For more information about using operator overloading you can visit this link
http://www.cprogramming.com/tutorial/operator_overloading.html
Final Code:
// Comment struct point { int x, y; point() {} point (int _x, int _y) { x = _x; y = _y; } bool operator<(const point &rhs) const{ return make_pair(y,x) < make_pair(rhs.y, rhs.x); } bool operator==(const point &rhs) const{ return make_pair(y,x) == make_pair(rhs.y, rhs.x); } };Sample uses:
sorting an array in reverse order
Method 1:
vectorMethod 2:a; sort(a.rbegin(), a.rend());
sort(a.begin(), a.end());For an vector
#include#include #include #include #include #include #include using namespace std; bool cmp(int a,int b) { return a >= b; } int main() { int n; cin >> n; vector a; for (int i = 0; i < n; i++) { int x; cin >> x; a.push_back(x); } sort (a.begin(), a.end(), cmp); for (int i = 0; i < a.size(); i++) cout << a[i] << " "; return 0; }
For an array now.
#include#include #include #include #include #include #include using namespace std; bool cmp(int a,int b) { return a >= b; } int a[100]; int main() { int n; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } sort (a, a + n, cmp); for (int i = 0; i < a.size(); i++) cout << a[i] << " "; return 0; }
Deleting redundent points out of n points given. Two points are considered to be equal if both their x and y coordinates are equal.
#include#include #include #include #include #include #include using namespace std; struct point { int x, y; point() {} point (int x, int y) : x(x), y(y) {} bool operator<(const point &rhs) const{ return make_pair(y,x) < make_pair(rhs.y, rhs.x); } bool operator==(const point &rhs) const{ return make_pair(y,x) == make_pair(rhs.y, rhs.x); } }; int main() { int n; cin >> n; vector a; for (int i = 0; i < n; i++) { int x, y; cin >> x >> y; a.push_back(point(x, y)); } set st; for (int i = 0; i < n; i++) { st.insert(a[i]); } vector res; set :: iterator it; for (it = st.begin(); it != st.end(); it++) { res.push_back(*it); } for (int i = 0; i < res.size(); i++) cout << res[i].x << " " << res[i].y << endl; return 0; }
No comments:
Post a Comment