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 waystruct 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