У меня есть class Employee
, а класс Intern
, полученный из Employee
.Я хочу хранить информацию о сотрудниках в vector<>
и использовать базовые функции для vector
, такие как sort()
, find_if
и т. Д. Насколько я знаю, я должен использовать указатели.Проблема в том, что я не знаю, как использовать эти функции на vector< * >
Вот пример того, что я пытаюсь сделать:
vector<unique_ptr<Employee>> Firm;
hireIntern(Firm);
//////////////////////////////
void hireIntern(vector<unique_ptr<Employee>>& sourceIntern) {
string fillName;
string fillSurname;
cout << endl;
cout << "Enter Intern Name: ";
cin >> fillName;
cout << "Enter Intern Surname: ";
cin >> fillSurname;
Intern newIntern(fillName, fillSurname);
newIntern.setID();
newIntern.Hire();
newIntern.setSalary(1500);
while (true) { /* 1 */
auto it = find_if(sourceIntern.begin(), sourceIntern.end(),
[&newIntern](const Employee &obj) { return obj.getID() == newIntern.getID(); });
if (it != sourceIntern.end()) {
newIntern.setID();
} else {
break;
}
}
cout << newIntern.getName() << " " << newIntern.getSurname() << " (" << newIntern.getID()
<< ") has been hired" << endl;
sourceIntern.emplace_back(new Intern());
sortEmployeeIDs(sourceIntern);
}
/* 2 */
void sortEmployeeIDs(vector<unique_ptr<Employee>>& sourceEmployee) {
sort(sourceEmployee.begin(), sourceEmployee.end(), [&sourceEmployee](const Employee &left, const Employee &right) {
return left.getID() < right.getID();
});
}
РЕДАКТИРОВАТЬ: обновленный код, теперь проблема в том, что объект некажется, не сохраняются в векторе, как я пытаюсь cout << i->getID();
void hireIntern(vector<unique_ptr<Employee>>& sourceIntern) {
string fillName;
string fillSurname;
cout << endl;
cout << "Enter Intern Name: ";
cin >> fillName;
cout << "Enter Intern Surname: ";
cin >> fillSurname;
Intern newIntern(fillName, fillSurname);
newIntern.setID();
newIntern.Hire();
newIntern.setSalary(1500);
while (true) {
auto it = find_if(sourceIntern.begin(), sourceIntern.end(),
[&newIntern](const unique_ptr<Employee> &obj) { return obj->getID() == newIntern.getID(); });
if (it != sourceIntern.end()) {
newIntern.setID();
} else {
break;
}
}
cout << newIntern.getName() << " " << newIntern.getSurname() << " (" << newIntern.getID()
<< ") has been hired" << endl;
sourceIntern.emplace_back(new Intern());
sortEmployeeIDs(sourceIntern);
for(const auto &i : sourceIntern) {
cout << i->getID();
}
}