目的:我有一个二维向量。我想按其第四列中的值对其进行排序。例如,我想对这个向量进行排序:
vector<vector<double>> vector1 = {{4,3,5,3},
{2,6,3,7},
{6,8,5,1},
{5,6,1,5}};
我想按第4列中的值对它的行进行排序,以便其在行中的元素位置不变,但矢量中的行位置也发生了变化,因此第4列中的元素按此顺序排列:
vector1 = {{6,8,5,1},
{4,3,5,3},
{5,6,1,5},
{2,6,3,7}};
我以为我将不得不使用sort(),但是在网上搜索之后,老实说,我仍然完全不知道如何解决这个问题,因此,对代码的直接帮助,甚至对网站或资源的指导,都将不胜感激。谢谢!
使用std::sort
带有自定义谓词,例如:
std::sort(vector1.begin(),
vector1.end(),
[] (const std::vector<double> &a, const std::vector<double> &b)
{
return a[3] < b[3];
});
(当然,还要进行适当的错误检查)。
相对于给定谓词,对“外部向量”的每个项目(每个项目是对应于一行的一维向量)进行排序,并按它们的第4个元素(“行”中的第4列)对它们进行排序。
如文档中所述,谓词应采用两项,如果第一项比另一项“严格小于”,则返回true,否则返回false。比较数字类型时,这很简单,因为我们可以使用<
运算符。在您的情况下,如果第四个元素小于,则一个“行”小于另一个。
编辑:请参见此处以获取工作演示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句