c ++如何按每行列中的值对二维向量的行进行排序
c++ How to sort the rows of a 2d Vector, by the values in each rows column
目标: 我有一个二维向量。我想按第 4 列中的值对其进行排序。
例如我想对这个向量进行排序:
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];
});
(当然有适当的错误检查)。
这根据给定的谓词对 "outer vector" 的每个项目(每个项目都是对应于一行的一维向量)进行排序,它按它们的第 4 个元素([= 中的第 4 列)对它们进行排序26=]).
如文档中所述,谓词应包含两项,如果第一项 "strictly less" 比另一项高 return 则为真,否则为假。当比较数字类型时,这很好也很容易,因为我们可以只使用 <
运算符。在您的情况下,如果第 4 个元素小于 "row",则另一个 "less than"。
编辑:参见 here 工作演示。
目标: 我有一个二维向量。我想按第 4 列中的值对其进行排序。 例如我想对这个向量进行排序:
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];
});
(当然有适当的错误检查)。
这根据给定的谓词对 "outer vector" 的每个项目(每个项目都是对应于一行的一维向量)进行排序,它按它们的第 4 个元素([= 中的第 4 列)对它们进行排序26=]).
如文档中所述,谓词应包含两项,如果第一项 "strictly less" 比另一项高 return 则为真,否则为假。当比较数字类型时,这很好也很容易,因为我们可以只使用 <
运算符。在您的情况下,如果第 4 个元素小于 "row",则另一个 "less than"。
编辑:参见 here 工作演示。