【问题标题】:Sort vector of pointers to obcjects by value of property of these objects按这些对象的属性值对指向对象的指针向量进行排序
【发布时间】:2017-09-14 23:25:07
【问题描述】:

在班级管理器中,我有这些方法:

void Manager::SortElementsById()
{
    sort(world->GetElements().begin(), world->GetElements().end(), compareById);
}

bool compareById(const Element* element1, const Element* element2)
{
    return element1->Id < element2->Id;
}

world 是指向 World 类对象的指针。类世界包含:

vector<Element*> elements; 
vector<Element*> World::GetElementss()
{
    return this->elements;
}

类元素包含:

int Id;

我有两个问题:

  1. 为什么它不起作用?我有以下错误:“错误 C2065 'compareById': 未声明的标识符”

  2. 最终,我希望将 Id(在 Element 类中)设为私有,并通过公共方法 GetId() 返回这些字段的值。当我想在 const 对象上执行此方法时这是非法的,所以我不知道在这些条件下如何对这些向量进行排序。

【问题讨论】:

    标签: c++ sorting pointers object vector


    【解决方案1】:

    我有以下错误:“错误 C2065 'compareById': 未声明的标识符”

    像往常一样,compareById 必须在使用前声明。 (除非它与类内函数是同一类的成员,但它似乎根本不是类成员。)

    我想在 const 对象上执行这个方法是非法的

    听起来你只需要让你的函数成为一个 const 成员函数。像这样声明

    int GetId() const;
    

    您将被允许在 const 对象上调用它。

    【讨论】:

    • 该错误实际上是由错误的顺序引起的。但是现在,当我执行 SortElementsById() 方法时出现运行时错误:“表达式:向量迭代器不兼容”。
    • 那是因为GetElements()返回一个向量的副本,而不是同一个向量,所以world-&gt;GetElements().begin()world-&gt;GetElements().end()是来自两个不同向量的迭代器。 GetElements() 应该通过引用返回。
    猜你喜欢
    • 2011-07-07
    • 2014-03-11
    • 2014-12-29
    • 2020-09-17
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    相关资源
    最近更新 更多