Вопрос
привет, я пытаюсь создать карту, содержащую следующие объекты:класс Сотрудник >> получен из Сотрудника:это следующие классы:Рабочий, менеджер и вице-менеджер.На моей карте я хочу, чтобы сотрудник был отсортирован по его идентификатору, который является Чар* Я попытался создать такую карту: `
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();
у меня много проблем в моем коде, мне бы очень хотелось услышать, что вы, ребята, хотите сказать, спасибо заранее
Решение
Прежде всего, итератор — это тип, который определяется в multimap
класс шаблона в вашем случае.Итак, вам нужно написать следующее:
multimap<const string,Employee*>::iterator myIterator;
Что касается второй части вашего вопроса, вы можете добавить новое поле в Employee
класс, который будет определять тип сотрудника (Worker, Manager и ViceManage).Затем выполните кастинг в зависимости от этого поля:
if ( myIterator->type == VICE_MANAGER )
static_cast<ViceManager*>(*myIterator->second)->PrintEmployee();
Если ваши классы полиморфны (что является предпочтительным решением), вы можете вызвать PrintEmployee
без дополнительного приведения:
myIterator->second->PrintEmployee();
Другие советы
Действительно, ошибок всего две, обе связаны с итераторами.
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
Я заметил, что этот код на самом деле не использует преимущества функциональности карты, я предполагаю, что это касается других разделов кода.
Редактирование, чтобы исправить некоторые ошибки, которые я пропустил