Вы можете сделать свою жизнь проще, используя std::vector<std::vectror<int>>
.
std::vector<std::vector<int>> Array = { {8 ,1 ,1 ,0},
{6 ,0 ,0 ,0},
{7 ,1 ,1 ,1},
{2 ,1 ,1 ,1},
{1 ,1 ,1 ,1} };
Затем вы можете использовать std::sort
и лямбда-функции для их сортировки.
std::sort(Array.begin(), Array.end(),
[](std::vector<int> const& lhs, std::vector<int> const& rhs)
{ return lhs[0] < rhs[0] });
Если размеры массива известны во время компиляции, также возможно использование std::array
.
std::vector<std::array<int, 4>> Array = { {8 ,1 ,1 ,0},
{6 ,0 ,0 ,0},
{7 ,1 ,1 ,1},
{2 ,1 ,1 ,1},
{1 ,1 ,1 ,1} };
или
std::array<std::array<int, 4>, 5> Array = { {8 ,1 ,1 ,0},
{6 ,0 ,0 ,0},
{7 ,1 ,1 ,1},
{2 ,1 ,1 ,1},
{1 ,1 ,1 ,1} };
std::sort
можно использовать любой из этих массивов.
Если вам нужно использовать 2D-массив, он будет более сложным, поскольку массивы не могут быть назначены.Вы можете создать массив указателей, которые указывают на элементы Array
, отсортировать массив указателей, используя std::sort
.
int Array[5][4] = {
{8 ,1 ,1 ,0},
{6 ,0 ,0 ,0},
{7 ,1 ,1 ,1},
{2 ,1 ,1 ,1},
{1 ,1 ,1 ,1} };
int* ptrArray[5] = {Array[0], Array[1]. Array[2], Array[3], Array[4]);
std::sort(ptrArray, ptrArray+5,
[](int* lhs, int* rhs)
{ return lhs[0] < rhs[0] });
После этого к отсортированному массиву можно получить доступ, используя ptrArray
, даже еслиArray
все еще остается в своем первоначальном состоянии.