fork download
  1. #include <iostream>
  2. #include <map>
  3. #include <string>
  4. #include <vector>
  5. #include <functional>
  6. using namespace std;
  7.  
  8. struct Car {
  9. string name;
  10. int age;
  11. string manufacturer;
  12. };
  13.  
  14. map<string,function<bool(Car&,string&)>> carFieldEq = {
  15. {"name", [] (Car &c, string& cmp) { return c.name == cmp; }}
  16. , {"age", [] (Car &c, string& cmp) { return to_string(c.age) == cmp; }}
  17. , {"manufacturer", [] (Car &c, string& cmp) { return c.manufacturer == cmp; }}
  18. };
  19.  
  20. map<string,function<bool(Car&,string&)>> carFieldLess = {
  21. {"name", [] (Car &c, string& cmp) { return c.name < cmp; }}
  22. , {"age", [] (Car &c, string& cmp) { return c.age < std::stoi(cmp); }}
  23. , {"manufacturer", [] (Car &c, string& cmp) { return c.manufacturer < cmp; }}
  24. };
  25.  
  26. int main() {
  27. auto cars = vector<Car> {
  28. {"Impala", 10, "Chevrolet"}
  29. , {"Focus", 3, "Ford"}
  30. , {"Jetta", 3, "VW"}
  31. };
  32. string fieldNameEq, eqCmp;
  33. cin >> fieldNameEq >> eqCmp;
  34. cout << "==== Cars matching " << fieldNameEq << "==" << eqCmp << ":" << endl;
  35. for (auto &c : cars) {
  36. if (carFieldEq[fieldNameEq](c, eqCmp)) {
  37. cout << c.name << " " << c.age << " " << c.manufacturer << endl;
  38. }
  39. }
  40. string fieldNameLess, lessCmp;
  41. cin >> fieldNameLess >> lessCmp;
  42. cout << "==== Cars matching " << fieldNameLess << "<" << lessCmp << ":" << endl;
  43. for (auto &c : cars) {
  44. if (carFieldLess[fieldNameLess](c, lessCmp)) {
  45. cout << c.name << " " << c.age << " " << c.manufacturer << endl;
  46. }
  47. }
  48. return 0;
  49. }
  50.  
Success #stdin #stdout 0s 3472KB
stdin
manufacturer Ford
age 6
stdout
==== Cars matching manufacturer==Ford:
Focus 3 Ford
==== Cars matching age<6:
Focus 3 Ford
Jetta 3 VW