class Polygon3D
{
public:
float GetDepth() const
{
return _depth;
}
private:
float _depth;
};
class Model
{
public:
void Sort(void);
{
std::sort(_polygons.begin(), _polygons.end(), SortMethod);
}
private:
std::vector<Polygon3D> _polygons;
static bool SortMethod(const Polygon3D& lhs, const Polygon3D& rhs)
{
return lhs.GetDepth() < rhs.GetDepth();
}
};
我希望上面的代码足以解释我要做什么,按深度排序。但是,尽管多边形的深度不同,但排序似乎没有任何作用。尝试查看其他问题,但找不到答案,所以不确定我要缺少什么。 谢谢。
答案 0 :(得分:0)
使用'functor'(函数对象-通过重载operator()
类似于函数的对象/类):
#include <vector>
#include <algorithm>
class Polygon3D
{
public:
Polygon3D(float depth) : _depth(depth) {}
float GetDepth() const
{
return _depth;
}
private:
float _depth;
};
class Model
{
public:
void InsertPolygon(Polygon3D polygon)
{
_polygons.push_back(polygon);
}
void Sort()
{
std::sort(_polygons.begin(), _polygons.end(), Model());
}
bool operator() (const Polygon3D& lhs, const Polygon3D& rhs) const
{
return (lhs.GetDepth() < rhs.GetDepth());
}
private:
std::vector<Polygon3D> _polygons;
};
int main()
{
Model model;
for (int i = 0; i < 10; ++i)
model.InsertPolygon(Polygon3D(std::rand()));
model.Sort();
return 0;
}
或者您可以重载Polygon3D
的{{1}},因此您可以调用operator<
,而不必指定自定义比较函子:
std::sort
顺便说一句,如果您发布一个最小但可验证的示例(例如,我们可以进行复制/粘贴和编译而无需进行更改),通常会收到来自此处人员的更好答复。