gpt4 book ai didi

c++ - 如何在 C++ 中对包含 vector 类型的类进行排序?

转载 作者:行者123 更新时间:2023-11-30 01:43:03 29 4
gpt4 key购买 nike

我想对包含 vector 类型的类进行排序。

例如,

class Line
{
public;
vector<float> Angle;
vector<float> Length;
}

角度和长度是线段的角度和长度。

Line LineSegment;
LineSegment.Angle.push_back(10.0); LineSegment.Length.push_back(100.0);
LineSegment.Angle.push_back(20.0); LineSegment.Length.push_back(50.0);
LineSegment.Angle.push_back(30.0); LineSegment.Length.push_back(10.0);

第一条线段的角度为 10 度,长度为 100 像素。第二个:20 度,50 个像素,第三个:30 度,10 个像素。

对于这个例子,我想按长度排序,这样结果应该有原始的反向索引。

我该怎么做?我搜索了几种排序算法,但它们解决了 vector 或类或包含类类型的 vector 的排序问题。

最佳答案

将线段表示为对象可能更符合逻辑,例如:

struct LineSegment {
float Angle;
float Length;

LineSegment(float angle, float len) : Angle(angle), Length(len) { }
};

并将线段集(称为“线”)作为 LineSegment 的 vector :

std::vector<LineSegment> line;
line.emplace_back(10.0, 100.0)
line.emplace_back(20.0, 50.0);
line.emplace_back(30.0, 10.0);

这对“线段”进行了分组,排序时不应将其拆分,例如:

Angle1 Length1    Angle2 Length2    Angle3 Length3

答案中的代码如下:

Angle1 Angle2 Angle3    Length1 Length2 Length3

然后 line 可以使用比较 LineSegment 实例的比较函数作为一个整体进行排序:

std::sort(line.begin(), line.end(), [](const LineSegment& a, const LineSegment& b) { return a.Angle < b.Angle; })
// Sorts by ascending angle

关于c++ - 如何在 C++ 中对包含 vector<float> 类型的类进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38452763/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com