Прежде всего - используйте std::array<T, size>
вместо массивов квадратных скобок в стиле C (T[]
).Использование:
std::array<std::array<int, 7>, 4> matrix{
{
{{4, 20, 15, 23, 18, 9, 89}},
{{1, 8, 23, 22, 14, 18, 86}},
{{17, 15, 13, 18, 12, 15, 90}},
{{3, 18, 8, 20, 12, 5, 66}}
}
};
Хотя запутанное число скобок может показаться странным на первый взгляд, вы быстро забудете об этом, когда поймете, насколько мощным является инструмент std::array
.
Секундавсе - использовать стандартные алгоритмы.Вам необходимо:
- получить последний элемент данной строки
- получить последний элемент другой строки
- определить функцию сравнения, которая будет сравнивать вышеупомянутые элементы сэффективно использовать для сравнения целых строк
- использовать эту функцию со стандартным алгоритмом сортировки:
std::sort
Предлагаемое решение:
std::sort(matrix.begin(), matrix.end(), [](const auto& first_row,
const auto& second_row) {
return first_row.back() < second_row.back();
});
Мы используем лямбда-выражение для определения компаратора, который будет сравнивать две строки.Это все, что нужно std::sort
- способ сравнения двух элементов диапазона, который он сортирует - в этом случае мы определяем, как сравнивать две строки матрицы (обычным способом C++
является предоставлениестрогое слабое упорядочение с использованием оператора меньше чем - поэтому для сравнения последних элементов или каждой строки используется <
. Если вы хотите изменить порядок, просто используйте >
. Не используйте ни <=
, ни >=
, поскольку они не обеспечивают строгий порядок).