#include <vector>
#include <map>
#include <string>
#include <iostream>
class Base {
int x;
public:
Base() {}
virtual ~Base() {}
virtual void displayx() {
std::cout << x << "\n";
}
};
class Derived : public Base {
};
typedef std::vector<Base*> Bases;
typedef std::map<std::string, Bases> MyMap;
int main() {
Base* tanuki = new Derived;
MyMap myMap;
MyMap::iterator it = myMap.find("racoon");
if (it == myMap.end())
myMap["racoon"].push_back(tanuki);
else
it->second.push_back(tanuki);
// print displayx on all elements of racoon
it = myMap.find("racoon");
if (it != myMap.end()) {
Bases::iterator end = it->second.end();
for (Bases::iterator cur = it->second.begin(); cur != end; ++cur)
(*cur)->displayx();
}
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgQmFzZSB7CglpbnQgeDsKcHVibGljOgoJQmFzZSgpIHt9Cgl2aXJ0dWFsIH5CYXNlKCkge30KCXZpcnR1YWwgdm9pZCBkaXNwbGF5eCgpIHsKCQlzdGQ6OmNvdXQgPDwgeCA8PCAiXG4iOwoJfQp9OwoKY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlIHsKfTsKCnR5cGVkZWYgc3RkOjp2ZWN0b3I8QmFzZSo+IEJhc2VzOwp0eXBlZGVmIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBCYXNlcz4gTXlNYXA7CgppbnQgbWFpbigpIHsKCUJhc2UqIHRhbnVraSA9IG5ldyBEZXJpdmVkOwoJCglNeU1hcCBteU1hcDsKCU15TWFwOjppdGVyYXRvciBpdCA9IG15TWFwLmZpbmQoInJhY29vbiIpOwoJaWYgKGl0ID09IG15TWFwLmVuZCgpKQoJCW15TWFwWyJyYWNvb24iXS5wdXNoX2JhY2sodGFudWtpKTsKCWVsc2UKCQlpdC0+c2Vjb25kLnB1c2hfYmFjayh0YW51a2kpOwoKICAgIC8vIHByaW50IGRpc3BsYXl4IG9uIGFsbCBlbGVtZW50cyBvZiByYWNvb24KICAgIGl0ID0gbXlNYXAuZmluZCgicmFjb29uIik7CiAgICBpZiAoaXQgIT0gbXlNYXAuZW5kKCkpIHsKICAgIAlCYXNlczo6aXRlcmF0b3IgZW5kID0gaXQtPnNlY29uZC5lbmQoKTsKICAgIAlmb3IgKEJhc2VzOjppdGVyYXRvciBjdXIgPSBpdC0+c2Vjb25kLmJlZ2luKCk7IGN1ciAhPSBlbmQ7ICsrY3VyKQogICAgCSAgICAoKmN1ciktPmRpc3BsYXl4KCk7CiAgICB9CglyZXR1cm4gMDsKfQ==