📜  在C++中对2D向量进行排序|设置1(按行和列)(1)

📅  最后修改于: 2023-12-03 15:37:34.887000             🧑  作者: Mango

在C++中对2D向量进行排序|设置1(按行和列)

2D向量是一个矩阵,由多个向量嵌套而成。在C++中,我们可以使用vector<vector>来定义一个2D向量。如果我们想要对这个2D向量进行排序,我们可以使用C++内置的sort函数。

使用sort函数对2D向量按行排序

按行排序意味着按照行的顺序对2D向量进行排序。以下是按行排序的示例代码:

vector<vector<int>> matrix = {{3, 4, 1}, {1, 7, 9}, {5, 6, 2}};

// 按行排序
for(auto& row : matrix)
    sort(row.begin(), row.end());

// 输出排序后的矩阵
for(auto& row : matrix) {
    for(auto& col : row)
        cout << col << " ";
    cout << endl;
}

在上面的代码中,我们首先定义了一个2D向量matrix,然后使用for循环遍历矩阵的每一行,使用sort函数对每一行进行排序。最后,我们输出排序后的矩阵。

使用sort函数对2D向量按列排序

按列排序意味着按照列的顺序对2D向量进行排序。以下是按列排序的示例代码:

vector<vector<int>> matrix = {{3, 4, 1}, {1, 7, 9}, {5, 6, 2}};

// 转置矩阵
vector<vector<int>> transpose(matrix[0].size(), vector<int>(matrix.size()));
for(int i = 0; i < matrix.size(); i++) {
    for(int j = 0; j < matrix[i].size(); j++) {
        transpose[j][i] = matrix[i][j];
    }
}

// 对转置后的矩阵按行排序
for(auto& row : transpose)
    sort(row.begin(), row.end());

// 转置矩阵回来
matrix.resize(transpose[0].size());
for(int i = 0; i < matrix.size(); i++) {
    matrix[i].resize(transpose.size());
    for(int j = 0; j < matrix[i].size(); j++) {
        matrix[i][j] = transpose[j][i];
    }
}

// 输出排序后的矩阵
for(auto& row : matrix) {
    for(auto& col : row)
        cout << col << " ";
    cout << endl;
}

在上面的代码中,我们首先定义了一个2D向量matrix,然后使用转置矩阵的方法,将每一列转变为每一行。然后,我们使用for循环遍历矩阵的每一行,使用sort函数对每一行进行排序。最后,我们再次转置矩阵,将其恢复原来的形式,并输出排序后的矩阵。

注意,在相关代码中,使用transpose函数进行矩阵转置,需要调用头文件。