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表达式,则可以使用函数或类实例,使用重载的
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;
});