C++ 对不起作用的向量进行排序

C++ 对不起作用的向量进行排序,c++,sorting,object,vector,stl,C++,Sorting,Object,Vector,Stl,我在Animal中有重载运算符,如下所示 // A must be comparable to be used as keys bool operator<(const Archivo &right) const { return nombreArchivo < right.nombreArchivo; } 但是输出仍然是未排序的。因为您存储的是指向动物的指针向量,您没有给操作符提供机会考虑到您没有动物向量 在代码中,有一个指向动物的指针向量 改变 vector&l

我在
Animal
中有重载运算符,如下所示

// A must be comparable to be used as keys
bool operator<(const Archivo &right) const
{
    return nombreArchivo < right.nombreArchivo;
}

但是输出仍然是未排序的。

因为您存储的是指向
动物的指针向量
,您没有给
操作符提供机会考虑到您没有动物向量

在代码中,有一个指向动物的指针向量

改变

vector<Animal*>
向量
为了

向量

告诉我们现在是否有效

您正在向量中存储指针,而不是对象<代码>标准::排序
不取消对指针的引用,而是比较实际指针值。(从技术上讲,这并没有保证的行为,因为我假设这是您想要实现的多态性,这就是为什么您使用
Animal*
s而不是堆栈分配的
Animal
对象的原因。因为您使用指针作为向量的值类型,
std::sort()
s使用
operatornombreArchivonombreArchivo;
});

如果编译器不支持lambda表达式,则可以使用函数或类实例,使用重载的操作程序()/<代码>。

当您以特定语言提问时,请添加语言标记(我已添加C++)。因此,code>std::sort()正在按地址对它们进行排序。哼。。。再试一次?:)您需要在
vector
之前添加4个空格,而不是使用
,以便将其格式化为代码。感谢您的帮助和编辑我的答案:-)
vector<Animal*>
vector<Animal>
vector<Animal> animalesConConcha;
sort(animalesConConcha.begin(), animalesConConcha.end());

for(it=animalesConConcha.begin(); it!=animalesConConcha.end(); it++)
{
    cout<< it->nombre<<" | "<< it->indice<<endl;
}
struct Comparison
{
    bool const operator()(Animal *lhs, Animal *rhs) const
   {
         return (*lhs) < (*rhs);
    }
};

sort(animalesConConcha.begin(), animalesConConcha.end(), Comparison());
std::sort(animalesConConcha.begin(), animalesConConcha.end(),
[] (Animal* lhs, Animal* rhs) {
    return lhs->nombreArchivo < rhs->nombreArchivo;
});