Я получил вектор, инициализированный таким образом vector<unique_ptr<Worker>> Workers
. Рабочий - это базовый класс с закрытым именем поля и имеет два производных класса: Builder и Driver.Сортировка вектора unique_ptr's
добавить к Workers
векторных объектов Builder и драйвер, а затем я хочу, чтобы отсортировать вектор по имени, используя #include <algorithm>
так:
sort(Workers.begin(), Workers.end(), cmp_by_name);
bool cmp_by_name(const Worker &a, const Worker &b)
{
return a.getName() < b.getName();
}
но VS говорит, что
Ошибка 1 ошибка C2664: 'bool (const Worker &, const Worker &)': не может преобразовать аргумент 2 из 'std :: unique_ptr>' в 'const Worker &' c: \ program files (x86) \ microsoft visual studio 12.0 \ vc \ include \ algorithm 3071 1 A pp
Можете ли вы мне помочь?
EDIT:
Благодаря @NathanOliver, @ Rabbid76 и этот вопрос Sorting a vector of custom objects я отредактировал мой cmp_by_name к этой форме:
struct cmp_by_name
{
inline bool operator()(const unique_ptr<Worker>& a, const unique_ptr<Worker>& b)
{
return a->getName() < b->getName();
}
};
И я называю своего рода функцию, как это:
sort(Workers.begin(), Workers.end(), cmp_by_name());
Подпись предиката неверна. – Lingxi