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

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

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

介绍

在C++中,我们可以使用std::sort()函数来对2D向量进行排序。这个函数是一个通用的排序算法,可以用于任何类型的容器。

排序2D向量有多种方式。在本篇文章中,我们将讲解如何按列数进行排序。也就是说,我们将根据第k列的值,对2D向量进行排序。

实现步骤
  1. 定义一个按列数排序的比较函数

    bool compare(const vector<int>& v1, const vector<int>& v2) {
        return v1[k] < v2[k];
    }
    

    这里定义了一个compare()函数来比较两个vector<int>类型的向量v1v2。这个函数中,k是一个全局变量,代表比较时的列数。

  2. 通过函数指针将compare()函数传递给std::sort()函数,以实现按列数排序。

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

    这里,v是一个2D向量,v.begin()v.end()返回了v的迭代器。通过将compare()函数指针作为第三个参数传递给std::sort()函数,我们可以实现按列数排序。

  3. 运行并输出排序后的2D向量。

    for(auto x: v) {
        for(auto y: x) {
            cout << y << " ";
        }
        cout << endl;
    }
    

    这里,我们使用了auto关键字来自动推断变量类型。最后通过两层循环输出排序后的2D向量。

代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int k = 2; // 全局变量,表示第k列

bool compare(const vector<int>& v1, const vector<int>& v2) {
    return v1[k] < v2[k];
}

int main() {
    vector<vector<int>> v = {{1, 3, 2},
                             {20, 5, 10},
                             {6, 8, 2},
                             {7, 1, 9}};
    sort(v.begin(), v.end(), compare);
    for(auto x: v) {
        for(auto y: x) {
            cout << y << " ";
        }
        cout << endl;
    }
    return 0;
}
执行结果
1 3 2
6 8 2
7 1 9
20 5 10
总结

本篇文章介绍了如何在C++中对2D向量按列数进行排序。通过定义一个比较函数,将函数指针作为参数传递给std::sort()函数即可实现按列数排序。