簡體   English   中英

如何對包含向量的類進行排序 <float> 輸入C ++?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM