fork download
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <vector>
  4. #include <set>
  5. #include <string>
  6.  
  7. class Person {
  8. private:
  9. int age;
  10. std::string name;
  11. public:
  12. Person(int a, std::string n) : age(a), name(n) {}
  13. int getAge() const { return age; }
  14. std::string getName() const { return name; }
  15. bool operator<(const Person& rhs) const {return name < rhs.name; }
  16. };
  17.  
  18. template <typename T>
  19. class PtrProxy {
  20. private:
  21. const T* m_object;
  22.  
  23. public:
  24. PtrProxy(const T& obj) : m_object(&obj) {}
  25. PtrProxy(const T* obj) : m_object(obj) {}
  26.  
  27. const T& operator*() const { return *m_object; }
  28. const T* operator->() const { return m_object; }
  29. };
  30.  
  31. int main()
  32. {
  33. std::set<Person> p1;
  34. auto var = p1.insert(Person(30, "Bill"));
  35.  
  36. // Pur the address of the Person in p1 into p2
  37. std::vector<Person*> p2;
  38. p2.push_back(const_cast<Person*>(&(*(var.first))));
  39.  
  40.  
  41.  
  42. std::vector<int> data;
  43.  
  44. auto the_lambda = [](const PtrProxy<Person> pp) {return pp->getAge();};
  45.  
  46. std::transform(p1.begin(), p1.end(), std::back_inserter(data), the_lambda);
  47. std::transform(p2.begin(), p2.end(), std::back_inserter(data), the_lambda);
  48.  
  49. for (int age : data)
  50. {
  51. std::cout << age << "\n";
  52. }
  53.  
  54. }
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
30
30