📜  排序 2d 向量 c++ (1)

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

排序2D向量(C++) - 介绍 & 教程

排序2D向量是在C++编程中的一个常见问题,许多程序员通常会遇到这个问题。在这篇文章中,我们将向您介绍如何使用STL库的sort函数对2D向量进行排序。该函数可用于按列或行进行排序,并支持升序或降序排序。这篇文章包括以下主题:

  1. 什么是2D向量?
  2. 如何使用STL库进行排序?
  3. 排序例子。
  4. 如何扩展排序功能?
什么是2D向量?

2D向量是表示二维矩阵的数据类型,由行和列中的值组成。例如,以下是一个3x3的矩阵:

1 2 3
4 5 6
7 8 9

在C++编程中,2D向量通常使用STL库的vector容器实现。可以使用vector<vector>类型定义2D向量。例如,以下是一个定义3x3的矩阵的C++代码片段:

vector<vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
如何使用STL库进行排序?

STL库的sort函数可用于对2D向量进行排序。STL库提供了有用的排序函数,它们可以根据需要轻松地排序2D向量。sort函数需要三个参数:

  1. 用于排序的vector容器的begin()迭代器。
  2. 用于排序的vector容器的end()迭代器。
  3. 用于定义排序方法的比较函数。

比较函数是一个接受两个参数并返回一个bool值的函数。它将其传递的两个元素相互比较,如果第一个元素小于第二个元素,则返回true。

以下是一个比较函数模板:

bool compare(const vector<int>& a, const vector<int>& b) {
    //比较a和b
    return true/false; //如果a小于b,则返回true
}
排序例子

以下是一个演示如何对2D向量按行升序排序的例子:

#include <iostream>
#include <vector>
#include <algorithm> //sort函数所在的头文件

using namespace std;

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

bool compare(const vector<int>& a, const vector<int>& b) {
    return a[0] < b[0];
}

int main() {

    cout << "Before sorting:\n";
    for(auto row: matrix) {
        for(auto cell: row) {
            cout << cell << " ";
        }
        cout << "\n";
    }

    sort(matrix.begin(), matrix.end(), compare);

    cout << "After sorting:\n";
    for(auto row: matrix) {
        for(auto cell: row) {
            cout << cell << " ";
        }
        cout << "\n";
    }

    return 0;
}

上面的程序将按行和升序对2D向量进行排序。

输出结果:

Before sorting:
3 2 1
6 5 4
9 8 7
After sorting:
1 2 3
4 5 6
7 8 9
如何扩展排序功能?

STL库的sort函数具有许多选项,可以用于自定义排序。首先,STL库中的sort函数默认按升序排序。要按降序排序,请可以在比较函数中使用大于号(>)替代小于号(<)。

例如,以下比较函数将以降序方式对2D向量进行排序。

bool compare(const vector<int>& a, const vector<int>& b) {
    return a[0] > b[0]; //降序排序
}

其次,可以使用STL库中的sort函数按列而不是行排序。要按列排序,请在比较函数中比较每个行向量的特定列。例如,以下是按第二列升序排序的比较函数:

bool compare(const vector<int>& a, const vector<int>& b) {
    return a[1] < b[1];
}

最后,排序2D向量时,可以使用STL库中的sort函数对两个元素以外的更多属性进行比较。例如,以下比较函数将首先按第一列排序,其次按第二列排序:

bool compare(const vector<int>& a, const vector<int>& b) {
    if(a[0] != b[0]) {
        return a[0] < b[0];
    }
    return a[1] < b[1];
}
总结

排序2D向量是在C++编程中一个常见的问题。在本篇文章中,我们向您展示了如何使用STL库中的sort函数对2D向量进行排序。我们讨论了如何根据需要设置排序方法,包括按行或列排序以及升序或降序排列。通过选择适当的参数和比较函数,可以轻松地排序2D向量以满足特定的需求。