【发布时间】:2020-12-12 01:40:06
【问题描述】:
我有坐标给出的数据。我做了他们的课程,课程是由这个组成的:
Point2D (int x, int y)
Point3D (int z) //#include Point2D.h
Line2D (Point2D pt1, Point2D pt2)
Line3D (Point3D pt1, Point3D pt2)
现在,我应该能够根据任何过滤标准(每个类都是一个过滤标准)、任何排序标准(x, y, z 或其产品)和排序顺序(升序或降序)对数据进行排序
过滤条件指定要显示的记录集。
我创建了一个通用排序算法,但我应该使用 STL 算法中的排序函数。我在下面粘贴我的算法,但有人可以使用std::sort 函数简化它。
void sort(
vector<Point2D*>& point2DList,
vector<Point3D*>& point3DList,
vector<Line2D*>& line2DList,
vector<Line3D*>& line3DList,
string filterCriteria, string sortingCriteria, string sortingOrder)
{
if (filterCriteria == "Point2D")
{
for (int i = 0; i < (int)point2DList.size() - 1; i++)
{
int index = i;
for (int j = i + 1; j < point2DList.size(); j++)
{
if (sortingOrder == "ASC")
{
if ((sortingCriteria == "x-ordinate" && point2DList[index]->getX() > point2DList[j]->getX()) ||
(sortingCriteria == "y-ordinate" && point2DList[index]->getY() > point2DList[j]->getY()))
index = j;
}
else if (sortingOrder == "DSC")
{
if ((sortingCriteria == "x-ordinate" && point2DList[index]->getX() < point2DList[j]->getX()) ||
(sortingCriteria == "y-ordinate" && point2DList[index]->getY() < point2DList[j]->getY()))
index = j;
}
}
Point2D* ptr = point2DList[i];
point2DList[i] = point2DList[index];
point2DList[index] = ptr;
}
}
}
我只粘贴了算法的第一部分,其中涉及Point2D 对象,我也为其他 3 个类应用了相同的流程。
【问题讨论】:
-
你能写一个函数来接受两个项目,如果第一个项目应该在第二个项目之前就返回 true 吗?这是您要传递给
std::sort的内容。
标签: c++ algorithm class sorting c++11