Другие языки программирования и технологии

Сортировка 2-мерного массива в С++

Помогите простым кодом для реализации сортировки двумерного массива по последнему числу в строчке: Например 1 2 3 4 5 4 7 8 - введённый масив 6 7 8 1 6 7 8 1 1 2 3 4 - отсортированный массив 5 4 7 8
всё что тебе надо:

#include < algorythm >

сортируешь вот так функцией сорт:

it1 - итератор на первую (нулевую) строку матрицы
it2 - итератор на последнюю строку матрицы

sort(it1, it2, compare);
функцию сравнения двох элементов необходимо описать.

всё, матрица сортированная :)

вот пример кода:

( чтобы отобразился нормально код присутствуют лишние пробелы )

# include < iostream >
# include < cstdlib >
# include < math.h >
# include < vector >
# include < ctime >
# include < algorithm >

using namespace std ;

# define R 32767.0 // для генерирования чисел от 0 до 9

// эта функция выводит на экран матрицу из sN строк и sM столбиков
template < typename T >
void print_matrix ( T& matr, int sN, int sM )
{
int i, j ;
for( i = 0 ; i < sN ; i + +)
{
for ( j = 0 ; j < sM ; j + +)
{
cout < < matr [ i ] [ j ] < < " ";
} ;
cout < < endl < < endl;
} ;
cout < < endl;
return ;
} ;

// функция необходима для sort.
// сравнивает последние элементы
bool compare ( vector < int > arg1, vector < int > arg2)
{
if ( arg1 [ arg1.size ( ) - 1 ] < arg2 [ arg2.size ( ) - 1 ] )
return true;
return false;
} ;

int main()
{
int N,M ; // - размеры
int i,j ; // - счётчики
srand ( ( time ( NULL ) ) ) ; // - сид для рандомного заполнения матрицы

// считываем размеры:
cout < < " Type M (width) of matrix: " < < endl;
cin > > M ; // - ширину (кол-во столбцов)
cout < < " Type N (height) of matrix: " < < endl;
cin > > N; // - высоту (кол-во строк)
cout < < endl;

// создаём матрицу:
vector < vector < int > > mtrx ( N, vector < int > ( M ) ) ;

// если размер "фиговый" выходим
if ( ( M < = 0 ) || ( N < = 0 ))
return 0;

// генерируем числа. я поставил от 0 до 9
for ( i = 0 ; i < N ; i + +)
{
for( j = 0 ; j < M ; j + +)
{
mtrx [ i ] [ j ] = ( rand ( ) / R ) * 10 ;
} ;
} ;

// выводим матрицу (пока ещё не отсортированную)
print_matrix(mtrx, N, M) ;

// сортируем:
sort( mtrx.begin(), mtrx.end(), compare) ;

// выводим отсортированную матрицу:
print_matrix(mtrx, N, M) ;

// завершаем программу
cout < < endl < < endl ;
system ( " pause " ) ;
return 0 ;
}
Ли Олег
Ли Олег
873
Лучший ответ
Sergey Titarev if ( arg1 [ arg1.size ( ) - 1 ] < arg2 [ arg2.size ( ) - 1 ] )
return true;
return false;

Короче, Склифосовский

return arg1 [ arg1.size ( ) - 1 ] < arg2 [ arg2.size ( ) - 1 ];
Сортировок много, для начала можно взять пузырьком с небольшой модификацией: вместо A[j] брать A[j][3] (поскольку у нас 3-й элемент последний).
Sergey Titarev
Sergey Titarev
54 366
я бы написала код, но мэйл. ру его сильно перекручивает
Юрий Лим
Юрий Лим
557
Олег Макаров Это очень :'-(