2

你好,我正在尝试制作一个包含以下对象的地图:员工类>>派生自员工:以下类是:工人、经理和副管理。在我的地图中,我想让对象 Employee 按他的 ID 排序,它是 char* 我试图创建这样的地图:`

multimap<const string,Employee*> t1
t1<string,Employee>::iterator myIterator;
Date e(17,6,1985);
Address a("somecity","somestreet",15,12);
ViceManager* d = new ViceManager("John","Doh","035845778", e,a,"03-9458353",10000,85,"gsdasda");
t1.insert(make_pair(d->GetId(),d));
myIterator=t1.begin();
myIterator->comp_value->PrintEmployee();

我的代码中有很多问题我很想提前听听你们想说什么

4

2 回答 2

3

真的,那里只有两个错误,都与迭代器有关。

multimap<const string,Employee*> t1;
multimap<string,Employee*>::iterator myIterator; //Note the corrected iterator type
Date e(17,6,1985);
Address a("somecity","somestreet",15,12);
Employee* d = new ViceManager("John","Doh","035845778", e,a,"03-9458353",10000,85,"gsdasda");
t1.insert(make_pair(d->GetId(),d));
myIterator=t1.begin();
myIterator->second->PrintEmployee(); //Note the way of accessing the value

我注意到这段代码并没有真正利用地图功能,我认为这是代码的其他部分。

编辑以修复我错过的一些错误

于 2010-09-02T16:28:16.097 回答
2

首先,在您的情况下,迭代器是multimap模板类中类型定义的类型。因此,您需要编写以下内容:

multimap<const string,Employee*>::iterator myIterator;

至于问题的第二部分,您可以在Employee类中添加一个新字段,用于识别员工类型(工人、经理和副管理)。然后根据该字段进行投射:

if ( myIterator->type == VICE_MANAGER ) 
  static_cast<ViceManager*>(*myIterator->second)->PrintEmployee();

如果您的类是多态的(这是一个首选的解决方案),您可以PrintEmployee在没有额外转换的情况下调用:

myIterator->second->PrintEmployee();
于 2010-09-02T16:23:40.803 回答