typeid最好不要用于指针类型。
tr1::unordered_map<int,A*> mymap; A* a=new A(); A* b=new B(); mymap.insert(make_pair(0,a)); mymap.insert(make_pair(2,b)); printf("old: a= %s b=%s A=%s B=%s \n",typeid(*a).raw_name(),typeid(*b).raw_name(),typeid(A).raw_name(),typeid(B).raw_name()); A* tmpa=mymap[0]; A* tmpb=mymap[2]; auto it=mymap.find(2); auto it2=mymap.find(10); printf("new tmpa= %s tmpb=%s \n",typeid(*it->second).raw_name(),typeid(it->second).raw_name());