C/C++

Работа с многомерным статическим массивом на с++

Задание состоит в перестановке максимальных элементов в основную диагональ матрицы .Идей, как это гуманно и более универсально это сделать, нет .На уме только создание нескольких переменных под максимальные и перестановке их непосредственно по индексам в известный по размерам массив .Прошу подсказать способ получше
#include <algorithm>
#include <iostream>
#include <random>
#include <iomanip>
#include <vector>
using namespace std;
int main() {
const auto n = 5U;
int matrix[n][n];
uniform_int_distribution<> uid(1, 99);
mt19937 gen{ random_device()() };
auto rand = [&] {return uid(gen); };
for (auto& row : matrix) generate(begin(row), end(row), rand);
auto show = [](int x) { cout << setw(5) << x; };
for (auto& row : matrix) {
for_each(begin(row), end(row), show);
puts("\n");
}
puts("");
vector<int> box;
for (const auto& row : matrix) for (auto x : row) box.push_back(x);
sort(begin(box), end(box), greater<>());
for (auto i = 0U; i < n; ++i) {
if (matrix[i][i] == box[i]) continue;
for (auto j = 0U; j < n; ++j) {
for (auto k = 0U; k < n; ++k) {
if (matrix[j][k] == box[i]) {
if (j == k && j < i) continue;
swap(matrix[j][k], matrix[i][i]);
break;
}
}
}
}
for (auto& row : matrix) {
for_each(begin(row), end(row), show);
puts("\n");
}
system("pause > nul");
}
Даниил Зайцев
Даниил Зайцев
53 903
Лучший ответ
Александр Богомолов спасибо большое за проделанную работу, но крайне жаль что в данный момент на моем уровне изучения я понимаю от силы пару строк)
Ты че мне 22 и я ничего не понял почувствал себя пенсионером. Ты сума сошел такие сложные вопросы и слова сочитать
Александр Богомолов дядя а что вы тогда делаете в категории с программированием ?
Многомерный это 2, 3 и более размерный? Или вы имели в виду 2-мерный?
Если можно создавать доп. массив, то наверное лучше его создать и с ним работать. Ведь его размер это корень N степени от количества элементов, а значит - небольшой. После этого пройти по всем элементам исходного массива и добавить их в доп массив в сортированном виде. Если доп массив заполнен и элемент меньше меньшего - игнорировать, а иначе вставить в сортированный массив.
Ну а значением хранимым в доп массиве может быть значение матрицы или позиция этого значения. В зависимости от того, что вам надо...
После этого скопировать (переставить) в диагональ.
Александр Богомолов Похоже я неправильно понимаю ...
Необходимо найти определенное количество максимальных значений, которое будет соответствовать количеству строк ( решила сделать из массива квадратную матрицу, следовательно размер диагонали равен количеству элементов в строке), потом эти элементы перекинуть в новый массив одномерный, как-то отсортировать методом сравнения и вывести полученное.

Однако проблемы начались на первом этапе, тк создала новый цикл с подсчетом максимальных по массиву но для этого все равно были нужно было вводить переменные max1 и тд, дабы найти несколько последующих значений после максимального