#include #include #include #include using namespace std; class ChildT { public: void Name(string s) { name = s; } string Name(void) const; void Age(int a){ age = a; } int Age(void) const{ return age; } bool operator < (const ChildT & other) const; bool operator == (const ChildT & rhs) const { return (age == rhs.age and name == rhs.name); } private: string name{"Unknown"}; int age{0}; }; string ChildT::Name(void) const { return name; } bool ChildT::operator < (const ChildT & other) const{ if (age == other.age) { return name < other.name; } return age < other.age; } ostream & operator << (ostream & s, const ChildT & child) { s << child.Name() << " " << child.Age(); return s; } //typedef vector childVec; using ChildVecT = vector; void PrintClass( const vector & myClass); bool FindChild(const ChildVecT & myClass, ChildT key); int main() { vectormyClass; ChildT child; child.Age(2); child.Name("Zane"); myClass.push_back(child); child.Age(4); child.Name("Chris"); myClass.push_back(child); child.Age(8); child.Name("Sue"); myClass.push_back(child); child.Age(6); child.Name("Bob"); myClass.push_back(child); cout << "A child is " << child << endl; child.Age(5); child.Name("Alice"); myClass.push_back(child); cout << endl; cout << "The class is " << endl; for (auto c : myClass) { cout << c << endl; } cout << endl; cout << "Calling the function " << endl; PrintClass(myClass); vector::iterator c; cout << endl << endl; for(c = begin(myClass); c != myClass.end(); c++) { c->Age(c->Age()+1); } PrintClass(myClass); sort(begin(myClass), end(myClass)); cout << endl << endl; cout << "After the sort " << endl; PrintClass(myClass); if (FindChild(myClass, child)) { cout << "Found " << child << endl; } else { cout << "Did not find " << child << endl; } child.Age(child.Age()+1); if (FindChild(myClass, child)) { cout << "Found " << child << endl; } else { cout << "Did not find " << child << endl; } return 0; } void PrintClass( const vector & myClass){ vector::const_iterator i; //vector::constant_reverse_iterator i; for( i = myClass.begin(); i != myClass.end(); ++i) { cout << *i << endl; } /* for( i = crbegin(myClass); i != crend(myClass); ++i) { cout << "That is " << i - crbegin(myClass) << " " ; cout << *i << endl; } */ return ; } bool FindChild(const ChildVecT & myClass, ChildT key){ ChildVecT::const_iterator pos; pos = find(cbegin(myClass), cend(myClass), key); if (pos != cend(myClass)) { return true; } return false; }