#include <map>
class FSRVertex; // fwd
template <class FSRVertex_Forward = FSRVertex> // make the fwd default type
class FSREdge_ {
public:
char fC;
FSRVertex_Forward fTarget;
FSREdge_(char c, FSRVertex_Forward target)
:fC(c), fTarget(target)
{}
FSREdge_(const FSREdge_ &other) // std::map requires copy ctor
:fC(other.fC), fTarget(other.fTarget)
{}
FSREdge_() // std::map requires default ctor
{}
};
typedef FSREdge_<> FSREdge; // so that you don't have to carry the brackets everywhere
class FSRVertex {
public:
std::map<char, FSREdge> fOutEdges;
FSRVertex()
:fOutEdges()
{}
};
int main() {
// your code goes here
FSRVertex vertex;
FSREdge edge('a', vertex);
vertex.fOutEdges['a'] = edge;
return 0;
}
I2luY2x1ZGUgPG1hcD4KCiAgICBjbGFzcyBGU1JWZXJ0ZXg7IC8vIGZ3ZAoKICAgIHRlbXBsYXRlIDxjbGFzcyBGU1JWZXJ0ZXhfRm9yd2FyZCA9IEZTUlZlcnRleD4gLy8gbWFrZSB0aGUgZndkIGRlZmF1bHQgdHlwZQogICAgY2xhc3MgRlNSRWRnZV8gewogICAgcHVibGljOgogICAgICAgIGNoYXIgZkM7CiAgICAgICAgRlNSVmVydGV4X0ZvcndhcmQgZlRhcmdldDsKICAgICAgICAKICAgICAgICBGU1JFZGdlXyhjaGFyIGMsIEZTUlZlcnRleF9Gb3J3YXJkIHRhcmdldCkKICAgICAgICAgICAgOmZDKGMpLCBmVGFyZ2V0KHRhcmdldCkKICAgICAgICB7fQogICAgICAgIAogICAgICAgIEZTUkVkZ2VfKGNvbnN0IEZTUkVkZ2VfICZvdGhlcikgLy8gc3RkOjptYXAgcmVxdWlyZXMgY29weSBjdG9yCiAgICAgICAgICAgIDpmQyhvdGhlci5mQyksIGZUYXJnZXQob3RoZXIuZlRhcmdldCkKICAgICAgICB7fQogICAgICAgIAogICAgICAgIEZTUkVkZ2VfKCkgLy8gc3RkOjptYXAgcmVxdWlyZXMgZGVmYXVsdCBjdG9yCiAgICAgICAge30KICAgIH07CiAgICAKICAgIHR5cGVkZWYgRlNSRWRnZV88PiBGU1JFZGdlOyAvLyBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGNhcnJ5IHRoZSBicmFja2V0cyBldmVyeXdoZXJlCgogICAgY2xhc3MgRlNSVmVydGV4IHsKICAgIHB1YmxpYzoKICAgICAgICBzdGQ6Om1hcDxjaGFyLCBGU1JFZGdlPiBmT3V0RWRnZXM7CiAgICAgICAgRlNSVmVydGV4KCkKICAgICAgICAgICAgOmZPdXRFZGdlcygpCiAgICAgICAge30KICAgIH07CiAgICAKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgkKCUZTUlZlcnRleCB2ZXJ0ZXg7CglGU1JFZGdlIGVkZ2UoJ2EnLCB2ZXJ0ZXgpOwoJdmVydGV4LmZPdXRFZGdlc1snYSddID0gZWRnZTsKCQoJcmV0dXJuIDA7Cn0=