Нет.std::sort
нельзя использовать для сортировки двумерного массива, поскольку элементы двумерного массива являются массивами, а массивы нельзя заменять, чего требует std::sort
.
Вы можете использовать std::array
, как показано Тед , что может быть хорошо для небольшого массива, как у вас.Но имейте в виду, что замена массива имеет линейную сложность, и поэтому сортировка элементов массива может быть довольно медленной для больших массивов.
Если вы хотите отсортировать массив массивов, лучше использовать косвенное обращение.Вместо подмассивов используйте ссылки на массивы.Я имею в виду ссылку в общем смысле;вы не можете иметь массивы T&
ссылок.Вы можете оставить свой 2D-массив нетронутым, но отсортируйте массив указателей на этот 2D-массив:
char* rows[std::size(c)];
for(size_t i = 0; i < std::size(c); i++)
rows[i] = c[i];
}
std::sort(std::begin(rows), std::end(rows), [](char* l, char* r){
return std::strcmp(l, r) < 0;
});
// rows now contains pointers to each row of c; in sorted order
Если вы хотите изменить исходный массив вместо «представления указателя», вам следует использовать косвенное обращениев самом оригинальном массиве.Для этого вам нужно динамическое распределение, и самое простое решение - std::string
:
std::array<std::string, 13> c;
Это можно отсортировать даже без специального объекта сравнения.Обратите внимание, что строки в массиве пусты, поэтому вы должны сначала увеличить их, например, вставив символы.Это не полная замена массива, элементы которого существуют в течение всего времени жизни массива.