C++ で 2 次元配列をソートする方法は何ですか?

C++で2次元配列をソートするには、sort関数とカスタム比較関数を使用することができます。以下は例です:

#include <iostream>
#include <algorithm>
using namespace std;

bool compareArrays(const int* arr1, const int* arr2, int size) {
    for (int i = 0; i < size; i++) {
        if (arr1[i] < arr2[i]) {
            return true;
        } else if (arr1[i] > arr2[i]) {
            return false;
        }
    }
    return false;
}

int main() {
    const int rows = 3;
    const int cols = 4;
    int arr[rows][cols] = {{1, 4, 2, 3}, {5, 6, 7, 8}, {9, 10, 11, 12}};

    sort(&arr[0][0], &arr[0][0] + rows * cols, [&](const int& a, const int& b) {
        int row1 = (int)(&a - &arr[0][0]) / cols;
        int col1 = (int)(&a - &arr[0][0]) % cols;
        int row2 = (int)(&b - &arr[0][0]) / cols;
        int col2 = (int)(&b - &arr[0][0]) % cols;
        return compareArrays(arr[row1], arr[row2], cols);
    });

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }

    return 0;
}

この例では、最初にcompareArraysという関数を定義し、1次元配列の大小関係を比較するために使用します。その後、メイン関数内でsort関数を使用して2次元配列を並べ替えます。ここで、行優先の順序で2次元配列の要素を比較するために、カスタム比較関数を渡しています。

比較関数で要素の行と列のインデックスを取得するために、二次元配列内の要素の位置を計算するためにポインタ演算を使用しています。

最後に、二次元配列をソートして、二重のループを使用して走査し、出力します。

bannerAds