如何通过将列索引作为输入传递来基于任何列值对向量进行排序?

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];
              });
}