#include <iostream>
#include <map> // or <unordered_map>
#include <string>
class C{
public:
C* linked1;
C* linked2;
std::map<std::string, double> values; // or std::unordered_map
C(double d1, double d2) {
values["d1"] = d1;
values["d2"] = d2;
}
double add(const std::string& name) const {
return linked1->values.at(name) + linked2->values.at(name) + values.at(name);
}
};
int main() {
C c1{1., 2.};
C c2{3., 4.};
C c3{5., 6.};
c1.linked1 = &c2;
c1.linked2 = &c3;
double a1 = c1.add("d1");
double a2 = c1.add("d2");
std::cout << a1 << std::endl;
std::cout << a2 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPiAvLyBvciA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHN0cmluZz4KCmNsYXNzIEN7CnB1YmxpYzoKICAgIEMqIGxpbmtlZDE7CiAgICBDKiBsaW5rZWQyOwoKICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBkb3VibGU+IHZhbHVlczsgLy8gb3Igc3RkOjp1bm9yZGVyZWRfbWFwCiAgICAKICAgIEMoZG91YmxlIGQxLCBkb3VibGUgZDIpIHsKICAgICAgICB2YWx1ZXNbImQxIl0gPSBkMTsKICAgICAgICB2YWx1ZXNbImQyIl0gPSBkMjsKICAgIH0KCiAgICBkb3VibGUgYWRkKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIGxpbmtlZDEtPnZhbHVlcy5hdChuYW1lKSArIGxpbmtlZDItPnZhbHVlcy5hdChuYW1lKSArIHZhbHVlcy5hdChuYW1lKTsKICAgIH0KfTsKCgppbnQgbWFpbigpIHsKCUMgYzF7MS4sIDIufTsKCUMgYzJ7My4sIDQufTsKCUMgYzN7NS4sIDYufTsKCgljMS5saW5rZWQxID0gJmMyOwoJYzEubGlua2VkMiA9ICZjMzsKCglkb3VibGUgYTEgPSBjMS5hZGQoImQxIik7Cglkb3VibGUgYTIgPSBjMS5hZGQoImQyIik7IAoKCXN0ZDo6Y291dCA8PCBhMSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgYTIgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9