C++ 按对象属性值对指向对象的指针向量进行排序
在class Manager中,我有以下方法:C++ 按对象属性值对指向对象的指针向量进行排序,c++,sorting,pointers,object,vector,C++,Sorting,Pointers,Object,Vector,在class Manager中,我有以下方法: void Manager::SortElementsById() { sort(world->GetElements().begin(), world->GetElements().end(), compareById); } bool compareById(const Element* element1, const Element* element2) { return element1->Id <
void Manager::SortElementsById()
{
sort(world->GetElements().begin(), world->GetElements().end(), compareById);
}
bool compareById(const Element* element1, const Element* element2)
{
return element1->Id < element2->Id;
}
我有两个问题:
为什么它不起作用?我有以下错误:错误C2065“compareById”:未声明的标识符
最终,我希望类元素中的Id是私有的,并通过公共方法GetId返回这些字段的值。当我想在const对象上执行此方法时是非法的,所以我不知道在这些条件下如何对这些向量进行排序
我有以下错误:错误C2065“compareById”:未声明的标识符
与往常一样,在使用compareById之前必须声明它。除非它是与类内函数相同的类的成员,但它似乎根本不是类成员
在const对象上执行此方法是非法的
听起来您只需要将函数设置为常量成员函数。宣布它像
int GetId() const;
您可以在const对象上调用它。该错误实际上是由错误的顺序引起的。但是现在,当我执行SortElementsById方法时,我出现了运行时错误:表达式:vector iterator不兼容。这是因为GetElements返回的是向量的副本,而不是同一个向量,所以world->GetElements.begin和world->GetElements.end是来自两个不同向量的迭代器。GetElements应该通过引用返回。
int Id;
int GetId() const;