class Pass{
string passName;
public:
friend bool sorted(const Pass &lhs, const Pass &rhs);
}
bool sorted(const Pass &lhs, const Pass &rhs)
{
return lhs.passName < rhs.passName;
}
class Agent{
vector <Pass *> listPass;
public:
void sortPass();
}
void Agent::sortPass()
{
vector <Pass*>listSort = listPass;
vector <Pass*>::iterator ptr;
sort (listSort.begin(), listSort.end(), sorted);
for(ptr = listSort.begin(); ptr != listSort.end(); ptr++)
{
(*ptr)->display();
}
}
我可以通过其名称对Pass列表进行排序的方式有哪些?我已经实现了上面的代码,但它不起作用。我收到了从'Pass *'到const Pass&amp;的无效用户定义转换错误。
答案 0 :(得分:0)
由于listSort
是指针的向量,你需要将sorted
函数(和朋友声明)对齐以接受指针作为参数,如下所示:
bool sorted(const Pass *lhs, const Pass *rhs)
{
return lhs->passName < rhs->passName;
}
它会起作用。
朋友声明应如下所示:friend bool sorted(const Pass *lhs, const Pass *rhs);
答案 1 :(得分:-1)
我的偏好是重载运算符&lt;这样您就可以比较2个传递对象(如果您不需要此运算符)。通过这样做,你对sort的调用不需要最后一个参数来进行比较,我发现它更好。
class Pass{
string passName;
public:
inline bool operator< (const Pass &lhs, const Pass &rhs)){ return( lhs.passName < rhs.passName);}
}
sort (listSort.begin(), listSort.end());
至于其余部分,其他答案应解决您的编译问题。