按行总和对矩阵排序

时间:2019-12-23 13:52:54

标签: c++ matrix sum rows

嘿,我是编程新手,所以可以帮我完成我的程序吗?我必须按行总和对矩阵进行排序,小数总和必须是第一个,较大的数,最后必须是最大的和。 我已经做到了,但是我做不完:

$row2=mysqli_fetch_assoc($result2);
$Facilities['OpeningHours']['t2_id'] = $row2['id'];
$Facilities['OpeningHours']['t2_name'] = $row2['name'];
$Facilities['OpeningHours']['t2_link'] = $row2['link'];
$Facilities['OpeningHours']['t2_url'] = $row2['url'];

1 个答案:

答案 0 :(得分:0)

您可以使用标准算法std::sortstd::accumulate。下面有一个演示程序,展示了如何将这些算法一起使用。

#include <iostream>
#include <algorithm>
#include <numeric>
#include <cstdlib>
#include <ctime>

int main() 
{
    const size_t M = 3, N = 5;

    std::srand( ( unsigned int )std::time( nullptr ) );

    int **matrix = new int *[M];

    for ( size_t i = 0; i < M; i++ ) matrix[i] = new int[N];

    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ ) matrix[i][j] = std::rand() % ( M * N );
    }


    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ ) std::cout << matrix[i][j]  << ' ';
        std::cout << '\n';
    }

    std::cout << '\n';

    auto sort_by_sum = [N]( const auto &left, const auto &right )
    {
        return std::accumulate( left, left + N, 0ll ) < 
               std::accumulate( right, right + N, 0ll );
    };

    std::sort( matrix, matrix + M, sort_by_sum );

    for ( size_t i = 0; i < M; i++ )
    {
        for ( size_t j = 0; j < N; j++ ) std::cout << matrix[i][j]  << ' ';
        std::cout << '\n';
    }

    std::cout << '\n';

    return 0;
}

程序输出看起来像

11 2 4 14 0 
9 7 9 4 14 
10 7 5 0 7 

10 7 5 0 7 
11 2 4 14 0 
9 7 9 4 14 
相关问题