Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 按对象属性值对指向对象的指针向量进行排序_C++_Sorting_Pointers_Object_Vector - Fatal编程技术网

C++ 按对象属性值对指向对象的指针向量进行排序

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 <

在class Manager中,我有以下方法:

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;