使用STL方法在c++中对多维数组进行排序
Sorting multidimensional arrays in c++ using STL methods
我想知道是否有任何方法可以在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);
它会起作用的。
相关文章:
- 显示错误输出的简单数组排序程序
- C 使用单个函数对具有多种值类型的数组排序
- 2D数组排序,空格打乱顺序
- C 2D数组排序
- C++数组排序 - 将"bbba"和"0001"视为不正确排序的问题
- 数组排序功能
- CString 数组排序
- 简单的数组排序/检查 划分和征服版本
- C++ 中的多维数组排序
- 选择在++中对并行数组排序
- C++:二维指针数组排序:选择排序不适用于某些实例
- C++字符串数组排序
- C++中的指针数组排序算法
- 在VC++6中使用向量进行数组排序时出错,而在VC++2012中没有错误
- 将索引数组排序为主数组
- 数组排序、数组输入、数组输出
- C++数组排序,内存错误
- 在嵌入式系统上将数组排序功能从c++移植到c
- 基于其他int数组排序
- 多维数组排序c++奇怪行为