使用STL方法在c++中对多维数组进行排序

Sorting multidimensional arrays in c++ using STL methods

本文关键字:数组 排序 方法 STL c++ 使用      更新时间:2023-10-16

我想知道是否有任何方法可以在c++中使用STL对多维数组进行排序。我想尝试使用STL方法,因为它们将在比赛中表现最好,而不是编写我们自己的排序算法。我尝试了一个有缺陷的伪代码,但我不知道如何处理这个错误。

int a[n][n];
//read values into array
for(i=0;i<n;i++)
{
sort(a[i][0],a[i][n]);
}

这取决于您想要如何排序。首先,我建议使用std::vector。然后使用std::sort。默认情况下,它将按每个向量的第一个元素进行排序。请参见以下示例。

#include <iostream>
#include <vector>
#include <algorithm>
int main() {
    std::vector<std::vector<int>> a = {{1,5,4,3},
                                       {2,5,1,4},
                                       {1,1,6,2}};
    std::sort(begin(a), end(a));  // Sort a by the first element of each vector
    for (auto& line : a)   // Loop over each inner vector
    {
        for (auto& element : line)  // Loop over each element in current vector
        {
            std::cout << element;
        }
        std::cout << std::endl;
    }
    return 0;
}

输出

1162
1543
2514

或者,您可以遍历每个向量,并根据其元素进行排序

#include <iostream>
#include <vector>
#include <algorithm>
int main() {
    std::vector<std::vector<int>> a = {{1,5,4,3},
                                       {2,5,1,4},
                                       {1,1,6,2}};
    for (auto& line : a)   // Loop over each inner vector
    {
        std::sort(begin(line), end(line));  // Sort each vector
        for (auto& element : line)  // Loop over each element in current vector
        {
            std::cout << element;
        }
        std::cout << std::endl;
    }
    return 0;
}

输出

1345
1245
1126

更通用的是使用Boost多阵列。MultiArrays允许您指定所有排序的范围,然后您可以将这些范围输入std::sort,这取决于您想要排序的2D数组的子集

http://www.boost.org/doc/libs/1_56_0/libs/multi_array/doc/user.html#sec_views

而不是使用sort(a[i][0],a[i][n]);
使用sort(a[i],a[i]+n);
它会起作用的。