#include <iostream>
#include <vector>
#include <map>
class A {
public:
void foo(std::string state, std::string action, double const& reward) {
if (heuristic.count(action)) {
updateCoefficients(state, heuristic[action], reward);
} else {
std::vector<std::vector<double>> coefs(20, std::vector<double>(2, 0.0));
heuristic[action] = coefs;
}
}
private:
virtual void updateCoefficients(std::string /*state*/, std::vector<std::vector<double>>& /*coefs*/,
double /*reward*/) {}
public:
std::map<std::string, std::vector<std::vector<double>>> heuristic;
};
class B : public A {
virtual void updateCoefficients(std::string state, std::vector<std::vector<double>>& coefs,
double reward) override;
};
void B::updateCoefficients(std::string state, std::vector<std::vector<double>>& coefs,
double reward) {
for(unsigned i = 0; i < coefs.size(); i++) {
coefs[i][0] += 1;
}
for(unsigned i = 0; i < coefs.size(); i++) {
coefs[i][1] += 2;
}
}
using namespace std;
int main() {
A* instance = new B();
instance->foo("aaa", "bbb", 123);
cout << "First call" << endl;
for (auto h : instance->heuristic)
for (auto b : h.second)
for (auto c : b)
cout << c << " ";
cout << endl;
instance->foo("aaa", "bbb", 123);
cout << "Updated" << endl;
for (auto h : instance->heuristic)
for (auto b : h.second)
for (auto c : b)
cout << c << " ";
cout << endl;
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgpjbGFzcyBBIHsKCQpwdWJsaWM6CnZvaWQgZm9vKHN0ZDo6c3RyaW5nIHN0YXRlLCBzdGQ6OnN0cmluZyBhY3Rpb24sIGRvdWJsZSBjb25zdCYgcmV3YXJkKSB7CiAgICAgICAgaWYgKGhldXJpc3RpYy5jb3VudChhY3Rpb24pKSB7CiAgICAgICAgICAgIHVwZGF0ZUNvZWZmaWNpZW50cyhzdGF0ZSwgaGV1cmlzdGljW2FjdGlvbl0sIHJld2FyZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8ZG91YmxlPj4gY29lZnMoMjAsIHN0ZDo6dmVjdG9yPGRvdWJsZT4oMiwgMC4wKSk7CiAgICAgICAgICAgIGhldXJpc3RpY1thY3Rpb25dID0gY29lZnM7CiAgICB9IAp9IApwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb2VmZmljaWVudHMoc3RkOjpzdHJpbmcgLypzdGF0ZSovLCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rvcjxkb3VibGU+PiYgLypjb2VmcyovLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgLypyZXdhcmQqLykge30KcHVibGljOgogICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rvcjxkb3VibGU+Pj4gaGV1cmlzdGljOwp9OwoKY2xhc3MgQiA6IHB1YmxpYyBBIHsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29lZmZpY2llbnRzKHN0ZDo6c3RyaW5nIHN0YXRlLCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3Rvcjxkb3VibGU+PiYgY29lZnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJld2FyZCkgb3ZlcnJpZGU7Cn07Cgp2b2lkIEI6OnVwZGF0ZUNvZWZmaWNpZW50cyhzdGQ6OnN0cmluZyBzdGF0ZSwgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8ZG91YmxlPj4mIGNvZWZzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSByZXdhcmQpIHsKICAgICBmb3IodW5zaWduZWQgaSA9IDA7IGkgPCBjb2Vmcy5zaXplKCk7IGkrKykgewogICAgICAgICBjb2Vmc1tpXVswXSArPSAxOwogICAgIH0KCiAgICAgZm9yKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29lZnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29lZnNbaV1bMV0gKz0gMjsKICAgICB9Cn0KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCQoJQSogaW5zdGFuY2UgPSBuZXcgQigpOwoJaW5zdGFuY2UtPmZvbygiYWFhIiwgImJiYiIsIDEyMyk7Cgljb3V0IDw8ICJGaXJzdCBjYWxsIiA8PCBlbmRsOwoJCglmb3IgKGF1dG8gaCA6IGluc3RhbmNlLT5oZXVyaXN0aWMpCgkJZm9yIChhdXRvIGIgOiBoLnNlY29uZCkKCQkJZm9yIChhdXRvIGMgOiBiKQoJCQkJY291dCA8PCBjIDw8ICIgIjsKCWNvdXQgPDwgZW5kbDsJCQkJCglpbnN0YW5jZS0+Zm9vKCJhYWEiLCAiYmJiIiwgMTIzKTsKCWNvdXQgPDwgIlVwZGF0ZWQiIDw8IGVuZGw7CgkKCWZvciAoYXV0byBoIDogaW5zdGFuY2UtPmhldXJpc3RpYykKCQlmb3IgKGF1dG8gYiA6IGguc2Vjb25kKQoJCQlmb3IgKGF1dG8gYyA6IGIpCgkJCQljb3V0IDw8IGMgPDwgIiAiOwoJY291dCA8PCBlbmRsOwkJCQkKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKCXJldHVybiAwOwp9