【问题标题】:Sorting elements in a vector by name按名称对向量中的元素进行排序
【发布时间】:2015-11-19 08:06:18
【问题描述】:
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& 的无效用户定义转换错误。

【问题讨论】:

  • 你也不见了;在类声明之后。
  • 通常将指针存储在向量中并不是最佳做法(除非您对此非常确定),它可能会导致内存泄漏。

标签: c++ sorting vector boolean polymorphism


【解决方案1】:

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

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

它会起作用的。

朋友声明应如下所示:

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

【讨论】:

  • 为什么我得到一个基本操作数的错误'->' has non-pointer type 'const Pass'
  • 可能你还没有更新函数参数,在你原来的函数中使用&代表引用,这里我使用*代表指针
  • @YeoMengTat 如果任何答案对你有用,你应该投票并标记为答案
  • @BartoszPrzybylski 这也不是强制
【解决方案2】:

我的偏好是重载运算符

class Pass{
 string passName;
   public:
 inline bool operator< (const Pass &lhs, const Pass &rhs)){ return( lhs.passName < rhs.passName);}
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2020-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    相关资源
    最近更新 更多