1: //stable_sort1a.cpp
3: #include <iostream>
4: #include <vector>
5: #include <algorithm>
6: using namespace std;
8: struct Point
9: {
10: int x;
11: int y;
12: //bool operator<(Point p) { return this->x < p.x; }
13: };
14: bool operator<(Point p1, Point p2) {return p1.x < p2.x;}
15: ostream& operator<<
16: (
17: ostream& os,
18: const Point& p
19: )
20: {
21: os << "(" << p.x << "," << p.y << ")";
22: return os;
23: }
25: int main()
26: {
27: cout << "\nThis program illustrates the use of the STL stable_sort() "
28: "algorithm (default\nversion) to sort Points, where one Point "
29: "comes before another if and only if\nits x-coordinate is less "
30: "than the x-coordinate of the second Point."
31:
32: "\n\nAn interesting exercise is to change the call to "
33: "stable_sort() to a call to\nsort() and observe "
34: "the difference in output, if any.";
35: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
37: Point a[] ={{2,4}, {2,3}, {5,5}, {3,7}, {3,5}, {1,2}, {1,1}};
38: vector<Point> v(a, a+7);
39: cout << "\nHere are the contents of the vector:\n";
40: for (vector<int>::size_type i=0; i<v.size(); i++)
41: cout << v.at(i) << " ";
42: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
44: stable_sort(v.begin(), v.end());
46: cout << "\nAnd here are the contents of the sorted vector:\n";
47: for (vector<Point>::size_type i=0; i<v.size(); i++)
48: cout << v.at(i) << " ";
49: cout << "\nPress Enter to continue ... "; cin.ignore(80, '\n');
50: }