按多个条件对向量进行排序

Posted

技术标签:

【中文标题】按多个条件对向量进行排序【英文标题】:Sort vectors by more conditions than one 【发布时间】:2017-03-17 17:06:15 【问题描述】:

我在其他帖子中询问过:my_old_post

但现在我需要更复杂的条件来对向量进行排序。

我有一个这样的向量: vector_points_original。然后,如果我对每个点的 z 进行排序,我还有其他向量,例如:vector_points_sorted_by_Z。 但我需要 vector_sorted_by_z 并按 y 分量对前四个点和后四个点进行排序。你能帮帮我吗?

【问题讨论】:

请在此处发布文本,而不是发布指向文本图像的链接。 【参考方案1】:
std::vector<CartesianPoint>v...;//place your values here      
//First, sort by Z    
std::sort(v.begin(), v.end(), [](const auto& p1, const auto& p2)return p1.z < p2.z;);
//Define a compare-by-y lambda
auto yComp = [](const auto& p1, const auto& p2)return p1.y < p2.y;;
//Use yComp for first 4 v[]
std::sort(v.begin(), v.begin() + 4, yComp);
//And for the second
std::sort(v.begin() + 4, v.begin() + 8, yComp);

如果您在通过y 重新订购时需要保存z 订单,那么yComp = [](const auto&amp; p1, const auto&amp; p2) return p1.y &lt; p2.y &amp;&amp; p1.z &lt;= p2.z;;

【讨论】:

【参考方案2】:

它对性能很重要吗?如果没有,只需将现有向量一分为二,按 Y 排序,然后将结果放回单个向量中?

std::vector<Point3d> sortedByZ;
std::vector<Point3d> firstFour(sortedByZ.begin(), sortedByZ.begin() + 4);
std::vector<Point3d> lastFour(sortedByZ.begin() + 5, sortedByZ.end());

// Sort firstFour and lastFour independently

sortedByZ = firstFour;
sortedbyZ.insert(sortedByZ.end(), lastFour.begin(), lastFour.end());

?

【讨论】:

以上是关于按多个条件对向量进行排序的主要内容,如果未能解决你的问题,请参考以下文章

如何按值和键的多个条件对嵌套字典进行排序?

在 Grails 中使用条件对多个字段进行排序

Excel VBA 在 Excel 2016 中按多个条件进行多行排序

使用多个排序条件对数组进行排序 (QuickSort)

按添加的 WHERE 条件的顺序对 SQL 输出进行排序

如何使用异常条件对多个字段进行排序