C++ 如何对包含向量的类进行排序<;浮动>;输入C++;?
我想对包含向量类型的类进行排序 比如说,C++ 如何对包含向量的类进行排序<;浮动>;输入C++;?,c++,sorting,vector,C++,Sorting,Vector,我想对包含向量类型的类进行排序 比如说, class Line { public; vector<float> Angle; vector<float> Length; } 第一条线段的角度为10度,长度为100像素。 第二:20度,50像素,第三:30度,10像素 对于这个例子,我想按长度排序,这样 结果应具有原始的反向索引 我该怎么做?我搜索了几种排序算法,但是它们解决了向量或类的排序问题,或者解决了包含类类型的向量的排序问题。如果选择向量没有任何原因,您可以使用常
class Line
{
public;
vector<float> Angle;
vector<float> Length;
}
第一条线段的角度为10度,长度为100像素。
第二:20度,50像素,第三:30度,10像素
对于这个例子,我想按长度排序,这样
结果应具有原始的反向索引
我该怎么做?我搜索了几种排序算法,但是它们解决了向量或类的排序问题,或者解决了包含类类型的向量的排序问题。如果选择向量没有任何原因,您可以使用常规映射:
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;
}
类行{
公众:
std::映射段;
};
线段;
线段.线段.定位(100.0,10.0);
线段.线段.定位(50.0,20.0);
线段.线段.定位(10.0,30.0);
用于(自动常量和分段:线段.线段){
std::cout如果选择向量背后没有任何原因,您可以使用常规映射:
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;
}
类行{
公众:
std::映射段;
};
线段;
线段.线段.定位(100.0,10.0);
线段.线段.定位(50.0,20.0);
线段.线段.定位(10.0,30.0);
用于(自动常量和分段:线段.线段){
std::cout将线段表示为对象可能更符合逻辑,如:
struct LineSegment {
float Angle;
float Length;
LineSegment(float angle, float len) : Angle(angle), Length(len) { }
};
以及一组线段(称为“直线”)作为线段的向量
:
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 Angle2 Angle3 Length1 Length2 Length3
然后,可以使用比较线段
实例的比较器函数将行
作为一个整体进行排序:
std::sort(line.begin(), line.end(), [](const LineSegment& a, const LineSegment& b) { return a.Angle < b.Angle; })
// Sorts by ascending angle
排序(line.begin(),line.end(),[](常量线段&a,常量线段&b){返回a.Angle
将线段表示为对象可能更符合逻辑,例如:
struct LineSegment {
float Angle;
float Length;
LineSegment(float angle, float len) : Angle(angle), Length(len) { }
};
以及一组线段(称为“直线”)作为线段的向量
:
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 Angle2 Angle3 Length1 Length2 Length3
然后,可以使用比较线段
实例的比较器函数将行
作为一个整体进行排序:
std::sort(line.begin(), line.end(), [](const LineSegment& a, const LineSegment& b) { return a.Angle < b.Angle; })
// Sorts by ascending angle
排序(line.begin(),line.end(),[](常量线段&a,常量线段&b){返回a.Angle 是C++吗?看起来是可能的。它是用一些用户定义的顺序从一个标准库中排序一个容器。相关:它不清楚你的意思。你有一个<代码>向量< /代码>你想排序吗?或者你想对<代码>行<代码>中的段进行排序吗?我也不明白SE。“对于这个例子,我想按长度排序,这样结果应该有原始的反向索引。”没有“C/C++”这样的东西是否是C++?看起来是这样的。可能的复制品,是用一些用户定义的顺序从一个标准库中排序一个容器。相关:它不清楚你的意思。你有一个<代码>矢量< /代码>你想排序吗?或者你想对<代码>行<代码>中的段进行排序吗?而且,我不理解这个句子。“在这个例子中,我想按长度排序,这样结果应该有原始的反向索引。”没有“C/C++”这样的东西。这是一个很好的观点。OP的设计可能受到一些硬件约束的影响(例如,他是否想并行行处理)这是一个很好的观点。OP的设计可能受到一些硬件限制的影响(例如,他是否想并行处理行)@JonathanWakely我首先使用了insert()
,忘了编辑它。我没有使用初始值设定项列表来保存OP的convention@JonathanWakely我使用了insert()
首先,我忘了编辑它。我没有使用初始值设定项列表来保持OP的惯例