按名称对向量中的元素进行排序

Sorting elements in a vector by name

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*' 到 const Pass& 的无效用户定义转换错误。

因为 listSort 是指针向量,你需要对齐 sorted 函数(和友元声明)来接受指针作为参数,像这样:

bool sorted(const Pass *lhs, const Pass *rhs)
{
    return lhs->passName < rhs->passName;
}

它会起作用。

好友声明应如下所示:

friend bool sorted(const Pass *lhs, const Pass *rhs);

我的偏好是重载运算符 <,这样您就可以比较 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());

至于其他的,其他答案应该可以解决你的编译问题。