[英]how to sort class that contains vector<float> type in C++?
我想對包含向量類型的類進行排序。
例如,
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像素。
對於此示例,我想按長度排序,以便結果應具有原始的反向索引。
我怎樣才能做到這一點? 我搜索了幾種排序算法,但是它們解決了向量或類或包含類類型的向量的排序。
將線段表示為對象可能更合乎邏輯,例如:
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
如果沒有必要選擇向量,則可以使用正則映射:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.