如何通过将列索引作为输入传递来基于任何列值对向量进行排序?
How to sort an vector based on any column value by passing the column index as input?
我已经尝试过下面的代码,但我想使用相同的函数根据不同的列进行排序。
此给定代码仅根据第一列进行排序。
bool sortcol( const vector <int> v1, const vector <int> v2)
{
return v1[0]<v2[0];
}
sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol);
有没有什么办法可以不做多个功能,而是只用一个功能就可以了。
像这样
bool sortcol(int ind, const vector <int> v1, const vector <int> v2)
{
return v1[ind]<v2[ind];
}
sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol(0));
您不能通过全局数据以外的方式将附加信息传递给用于比较 std::sort
的自由函数。
除了提供用于比较值的调用运算符之外,您还可以创建一个带有成员变量的结构来存储要比较的列。
我更喜欢 lambda,因为它会产生更短的代码:只需捕获索引。
注意:通过使用引用作为参数避免复制向量也有好处。
void SortByColumn(std::vector<std::vector<int>> & data, size_t column)
{
std::sort(data.begin(), data.end(),
[column](std::vector<int> const& v1, std::vector<int> const& v2)
{
return v1[column] < v2[column];
});
}
我已经尝试过下面的代码,但我想使用相同的函数根据不同的列进行排序。
此给定代码仅根据第一列进行排序。
bool sortcol( const vector <int> v1, const vector <int> v2)
{
return v1[0]<v2[0];
}
sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol);
有没有什么办法可以不做多个功能,而是只用一个功能就可以了。
像这样
bool sortcol(int ind, const vector <int> v1, const vector <int> v2)
{
return v1[ind]<v2[ind];
}
sort(ArrOfTimings.begin(), ArrOfTimings.end(), sortcol(0));
您不能通过全局数据以外的方式将附加信息传递给用于比较 std::sort
的自由函数。
除了提供用于比较值的调用运算符之外,您还可以创建一个带有成员变量的结构来存储要比较的列。
我更喜欢 lambda,因为它会产生更短的代码:只需捕获索引。
注意:通过使用引用作为参数避免复制向量也有好处。
void SortByColumn(std::vector<std::vector<int>> & data, size_t column)
{
std::sort(data.begin(), data.end(),
[column](std::vector<int> const& v1, std::vector<int> const& v2)
{
return v1[column] < v2[column];
});
}