Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何对包含向量的类进行排序<;浮动>;输入C++;?_C++_Sorting_Vector - Fatal编程技术网

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的惯例