#include <iostream>
#include <string>
#include <unordered_map>
struct A {
int first;
int second;
};
using member_ptr = int A::*;
using member_map = std::unordered_map<std::string, member_ptr>;
static member_map Amap = {
{"first", &A::first},
{"second", &A::second}
};
int main()
{
A a;
a.*(Amap["first" ]) = 42;
a.*(Amap["second"]) = 24;
std::cout << a.first << std::endl
<< a.second << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KCnN0cnVjdCBBIHsKICAgIGludCBmaXJzdDsKICAgIGludCBzZWNvbmQ7Cn07Cgp1c2luZyBtZW1iZXJfcHRyID0gaW50IEE6Oio7Cgp1c2luZyBtZW1iZXJfbWFwID0gc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBtZW1iZXJfcHRyPjsKCnN0YXRpYyBtZW1iZXJfbWFwIEFtYXAgPSB7CiAgICB7ImZpcnN0IiwgICZBOjpmaXJzdH0sCiAgICB7InNlY29uZCIsICZBOjpzZWNvbmR9Cn07CgppbnQgbWFpbigpCnsKICAgIEEgYTsKICAgIGEuKihBbWFwWyJmaXJzdCIgXSkgPSA0MjsKICAgIGEuKihBbWFwWyJzZWNvbmQiXSkgPSAyNDsKICAgIHN0ZDo6Y291dCA8PCBhLmZpcnN0ICA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCBhLnNlY29uZCA8PCBzdGQ6OmVuZGw7CiAgICByZXR1cm4gMDsKfQo=