Я новичок в векторной матрице.
C ++ и использование вектора> пожалуйста!
cin >> n >> m;
vector<vector<int>> A(n, vector<int> (m));
for (auto& rows : A)
for (auto& x : rows)
cin >> x;
sort(A.begin(), A.end());
Хотя мой вид не очень хорош. Спасибо!
1 ответ
Либо используйте стандартный алгоритм std::accumulate
, объявленный в заголовке <numeric>
, и лямбда-выражение, которое использует алгоритм и будет передано стандартному алгоритму std::sort
, либо напишите аналогичные функции самостоятельно.
Вот две демонстрационные программы, реализующие оба подхода.
#include <iostream>
#include <iomanip>
#include <vector>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <cstdlib>
#include <ctime>
int main()
{
size_t n = 0, m = 0;
std::cin >> n >> m;
std::vector<std::vector<int>> v( n, std::vector<int>( m ) );
std::srand( ( unsigned int )std::time( nullptr ) );
for ( auto &row : v )
{
for ( auto &item : row )
{
item = std::rand() % ( n * m );
}
}
for ( const auto &row : v )
{
for ( const auto &item : row )
{
std::cout << std::setw( 2 ) << item << ' ';
}
std::cout << '\n';
}
std::cout << '\n';
auto less = []( const auto &row1, const auto &row2 )
{
return std::accumulate( std::begin( row1 ), std::end( row1 ), 0ll ) <
std::accumulate( std::begin( row2 ), std::end( row2 ), 0ll );
};
std::sort( std::begin( v ), std::end( v ), less );
for ( const auto &row : v )
{
for ( const auto &item : row )
{
std::cout << std::setw( 2 ) << item << ' ';
}
std::cout << '\n';
}
std::cout << '\n';
return 0;
}
А также
#include <iostream>
#include <iomanip>
#include <vector>
#include <iterator>
#include <algorithm>
#include <cstdlib>
#include <ctime>
long long int accumulate( const std::vector<int> &v, long long int init = 0 )
{
for ( const auto &item : v ) init += item;
return init;
}
bool less( const std::vector<int> &v1, const std::vector<int> &v2 )
{
return accumulate( v1 ) < accumulate( v2 );
}
int main()
{
size_t n = 0, m = 0;
std::cin >> n >> m;
std::vector<std::vector<int>> v( n, std::vector<int>( m ) );
std::srand( ( unsigned int )std::time( nullptr ) );
for ( auto &row : v )
{
for ( auto &item : row )
{
item = std::rand() % ( n * m );
}
}
for ( const auto &row : v )
{
for ( const auto &item : row )
{
std::cout << std::setw( 2 ) << item << ' ';
}
std::cout << '\n';
}
std::cout << '\n';
std::sort( std::begin( v ), std::end( v ), less );
for ( const auto &row : v )
{
for ( const auto &item : row )
{
std::cout << std::setw( 2 ) << item << ' ';
}
std::cout << '\n';
}
std::cout << '\n';
return 0;
}
Если ввести размеры векторов, равные 3
и 4
, то результат может выглядеть так:
3 3 1 4
6 1 5 7
5 6 7 2
3 3 1 4
6 1 5 7
5 6 7 2
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .