#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <functional>
using namespace std;
struct Car {
string name;
int age;
string manufacturer;
};
map<string,function<bool(Car&,string&)>> carFieldEq = {
{"name", [] (Car &c, string& cmp) { return c.name == cmp; }}
, {"age", [] (Car &c, string& cmp) { return to_string(c.age) == cmp; }}
, {"manufacturer", [] (Car &c, string& cmp) { return c.manufacturer == cmp; }}
};
map<string,function<bool(Car&,string&)>> carFieldLess = {
{"name", [] (Car &c, string& cmp) { return c.name < cmp; }}
, {"age", [] (Car &c, string& cmp) { return c.age < std::stoi(cmp); }}
, {"manufacturer", [] (Car &c, string& cmp) { return c.manufacturer < cmp; }}
};
int main() {
auto cars = vector<Car> {
{"Impala", 10, "Chevrolet"}
, {"Focus", 3, "Ford"}
, {"Jetta", 3, "VW"}
};
string fieldNameEq, eqCmp;
cin >> fieldNameEq >> eqCmp;
cout << "==== Cars matching " << fieldNameEq << "==" << eqCmp << ":" << endl;
for (auto &c : cars) {
if (carFieldEq[fieldNameEq](c, eqCmp)) {
cout << c.name << " " << c.age << " " << c.manufacturer << endl;
}
}
string fieldNameLess, lessCmp;
cin >> fieldNameLess >> lessCmp;
cout << "==== Cars matching " << fieldNameLess << "<" << lessCmp << ":" << endl;
for (auto &c : cars) {
if (carFieldLess[fieldNameLess](c, lessCmp)) {
cout << c.name << " " << c.age << " " << c.manufacturer << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBDYXIgewogIHN0cmluZyBuYW1lOwogIGludCBhZ2U7CiAgc3RyaW5nIG1hbnVmYWN0dXJlcjsKfTsKCm1hcDxzdHJpbmcsZnVuY3Rpb248Ym9vbChDYXImLHN0cmluZyYpPj4gY2FyRmllbGRFcSA9IHsKCXsibmFtZSIsIFtdIChDYXIgJmMsIHN0cmluZyYgY21wKSB7IHJldHVybiBjLm5hbWUgPT0gY21wOyB9fQosICAgeyJhZ2UiLCBbXSAoQ2FyICZjLCBzdHJpbmcmIGNtcCkgeyByZXR1cm4gdG9fc3RyaW5nKGMuYWdlKSA9PSBjbXA7IH19CiwgICB7Im1hbnVmYWN0dXJlciIsIFtdIChDYXIgJmMsIHN0cmluZyYgY21wKSB7IHJldHVybiBjLm1hbnVmYWN0dXJlciA9PSBjbXA7IH19Cn07CgptYXA8c3RyaW5nLGZ1bmN0aW9uPGJvb2woQ2FyJixzdHJpbmcmKT4+IGNhckZpZWxkTGVzcyA9IHsKCXsibmFtZSIsIFtdIChDYXIgJmMsIHN0cmluZyYgY21wKSB7IHJldHVybiBjLm5hbWUgPCBjbXA7IH19CiwgICB7ImFnZSIsIFtdIChDYXIgJmMsIHN0cmluZyYgY21wKSB7IHJldHVybiBjLmFnZSA8IHN0ZDo6c3RvaShjbXApOyB9fQosICAgeyJtYW51ZmFjdHVyZXIiLCBbXSAoQ2FyICZjLCBzdHJpbmcmIGNtcCkgeyByZXR1cm4gYy5tYW51ZmFjdHVyZXIgPCBjbXA7IH19Cn07CgppbnQgbWFpbigpIHsKCWF1dG8gY2FycyA9IHZlY3RvcjxDYXI+IHsKCQl7IkltcGFsYSIsIDEwLCAiQ2hldnJvbGV0In0KCSwgICB7IkZvY3VzIiwgMywgIkZvcmQifQoJLCAgIHsiSmV0dGEiLCAzLCAiVlcifQoJfTsKCXN0cmluZyBmaWVsZE5hbWVFcSwgZXFDbXA7CgljaW4gPj4gZmllbGROYW1lRXEgPj4gZXFDbXA7Cgljb3V0IDw8ICI9PT09IENhcnMgbWF0Y2hpbmcgIiA8PCBmaWVsZE5hbWVFcSA8PCAiPT0iIDw8IGVxQ21wIDw8ICI6IiA8PCBlbmRsOwoJZm9yIChhdXRvICZjIDogY2FycykgewoJCWlmIChjYXJGaWVsZEVxW2ZpZWxkTmFtZUVxXShjLCBlcUNtcCkpIHsKICAgIAkJY291dCA8PCBjLm5hbWUgPDwgIiAiIDw8IGMuYWdlIDw8ICIgIiA8PCBjLm1hbnVmYWN0dXJlciA8PCBlbmRsOwoJCX0KCX0KCXN0cmluZyBmaWVsZE5hbWVMZXNzLCBsZXNzQ21wOwoJY2luID4+IGZpZWxkTmFtZUxlc3MgPj4gbGVzc0NtcDsKCWNvdXQgPDwgIj09PT0gQ2FycyBtYXRjaGluZyAiIDw8IGZpZWxkTmFtZUxlc3MgPDwgIjwiIDw8IGxlc3NDbXAgPDwgIjoiIDw8IGVuZGw7Cglmb3IgKGF1dG8gJmMgOiBjYXJzKSB7CgkJaWYgKGNhckZpZWxkTGVzc1tmaWVsZE5hbWVMZXNzXShjLCBsZXNzQ21wKSkgewogICAgCQljb3V0IDw8IGMubmFtZSA8PCAiICIgPDwgYy5hZ2UgPDwgIiAiIDw8IGMubWFudWZhY3R1cmVyIDw8IGVuZGw7CgkJfQoJfQkKCXJldHVybiAwOwp9Cg==