C++ 按名称对向量中的元素进行排序 班级通行证{ 字符串密码; 公众: 已排序的友元布尔(康斯特山口和左山口、康斯特山口和右山口); } 已排序的布尔值(常数通道和左侧、常数通道和右侧) { 返回lhs.passNamedisplay(); } }

C++ 按名称对向量中的元素进行排序 班级通行证{ 字符串密码; 公众: 已排序的友元布尔(康斯特山口和左山口、康斯特山口和右山口); } 已排序的布尔值(常数通道和左侧、常数通道和右侧) { 返回lhs.passNamedisplay(); } },c++,sorting,vector,boolean,polymorphism,C++,Sorting,Vector,Boolean,Polymorphism,对于我来说,有哪些可能的方法可以按名称对通行证列表进行排序?我已经实现了上面的代码,但它不起作用。我收到一个从“Pass*”到const Pass的无效用户定义转换错误 由于listSort是指针的向量,因此需要对齐sorted函数(和友元声明)以接受指针作为参数,如下所示: class Pass{ string passName; public: friend bool sorted(const Pass &lhs, const Pass &rhs); }

对于我来说,有哪些可能的方法可以按名称对通行证列表进行排序?我已经实现了上面的代码,但它不起作用。我收到一个从“Pass*”到const Pass的无效用户定义转换错误

由于
listSort
是指针的向量,因此需要对齐
sorted
函数(和友元声明)以接受指针作为参数,如下所示:

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();
            }
}
bool sorted(const Pass *lhs, const Pass *rhs)
{
    return lhs->passName < rhs->passName;
}

我的首选是重载操作符<,这样您就可以比较2个pass对象(如果您不需要此操作符进行任何其他操作)。通过这样做,您对sort的调用将不需要最后一个参数来进行比较,我发现比较好

friend bool sorted(const Pass *lhs, const Pass *rhs);
班级通行证{
字符串密码;
公众:
内联布尔运算符<(const-Pass&lhs,const-Pass&rhs)){return(lhs.passName

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

为什么我会得到一个错误,即基操作数'->'具有非指针类型'const Pass',可能您没有更新您正在使用的原始函数中的函数参数-,它代表引用,这里我用*表示pointers@YeoMengTat如果其中任何一个答案对你有效,你应该投票并标记为answer@BartoszPrzybylski这不是强制性的,你也失踪了;在类声明之后。通常在向量中存储指针不是最佳实践(除非您对此绝对确定),它可能会导致内存泄漏。
class Pass{
 string passName;
   public:
 inline bool operator< (const Pass &lhs, const Pass &rhs)){ return( lhs.passName < rhs.passName);}
}

sort (listSort.begin(), listSort.end());