按名称

时间:2015-11-19 08:06:19

标签: c++ sorting vector boolean polymorphism

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;的无效用户定义转换错误。

2 个答案:

答案 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());

至于其余部分,其他答案应解决您的编译问题。

相关问题