我想对包含矢量类型的类进行排序。
例如,
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像素。
对于这个例子,我想按长度排序,这样 结果应该有原始的反向索引。
我该怎么做?我搜索了几种排序算法,但是它们解决了向量或类的排序,或者包含类类型的向量。
答案 0 :(得分:3)
将线段表示为对象可能更合乎逻辑,例如:
struct LineSegment {
float Angle;
float Length;
LineSegment(float angle, float len) : Angle(angle), Length(len) { }
};
将一组线段(称为“线”)作为LineSegment
:
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
答案 1 :(得分:1)
如果选择矢量背后没有理由,可以使用常规地图:
class Line {
public:
std::map<float, float> segments;
};
Line lineSegment;
lineSegment.segments.emplace(100.0, 10.0);
lineSegment.segments.emplace(50.0, 20.0);
lineSegment.segments.emplace(10.0, 30.0);
for (auto const& seg : lineSegment.segments) {
std::cout << "Segment of length: " << seg.first << " and angle: " << seg.second << std::endl;
}
这将输出:
长度段:10和角度:30
长度段:50和角度:20
长度段:100和角度:10