如果您只想按第二列进行排序,那么您只需要提供一个自定义比较运算符即可。一种方法是:
struct StringListCompare
{
bool operator()(const vector<string>& lhs, const vector<string>& rhs)
{
if (lhs.size() < 2 || rhs.size() < 2)
{
}
else
{
return lhs[1] < rhs[1];
}
}
} StringListComparer;
int main()
{
sort(data_var.begin(), data_var.end(), StringListComparer);
}
编辑:如果直到运行时才知道要按哪一列进行排序,您可以在排序对象中进行编码:
class StringListCompare
{
public:
explicit StringListCompare(int column) : m_column(column) {}
bool operator()(const vector<string>& lhs, const vector<string>& rhs)
{
return lhs[m_column] < rhs[m_column];
}
private:
int m_column;
};
请注意我们已经添加了一个构造函数,用于指定所要操作的列。您可以像这样使用它:
// We set it up so the columns are 0-based:
StringListCompare compare_column_0(0), compare_column_1(1), compare_column_2(2);
cout << "Original:\n" << data_var << endl;
sort(data_var.begin(), data_var.end(), compare_column_2);
cout << "Sorted on column 2:\n" << data_var << endl;
sort(data_var.begin(), data_var.end(), compare_column_1);
cout << "Sorted on column 1:\n" << data_var << endl;
sort(data_var.begin(), data_var.end(), compare_column_0);
cout << "Sorted on column 0:\n" << data_var << endl;
如果您不想创建本地变量,那么您甚至不需要这样做:
sort(data_var.begin(), data_var.end(), StringListCompare(2));
cout << "Sorted on 2, no local sort variable:\n" << data_var << endl;
[Code at ideone]
vector<string>
应该在另一个之前或之后? - Billvector<vector<string>>
可以看作是一个二维的字符串数组,或者三维的字符数组。你希望以什么方式进行排序? - Mooing Duck