沐沐Mnn 2019-04-28 11:53 采纳率: 72.7%
浏览 1269
已采纳

C++编程填空:矩阵排序

描述

创建矩阵类,要求能够输入整数类型的m*n矩阵,并按照元素个数,矩阵中元素之和,创建矩阵顺序对矩阵类分别排序

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

class Mat{
    int h,w;
public:
    Mat(int height,int width):h(height),w(width)
// 在此处补充你的代码
int main()
{
    vector<Mat> m;
    m.push_back(Mat(2,2));
    m.push_back(Mat(3,4));
    m.push_back(Mat(2,2));
    cin >> m[0] >> m[1] >> m[2];
    sort(m.begin(),m.end());
    cout<< m[0] << endl << m[1] << endl << m[2] <<endl;
    cout<<"*************"<<endl;
    sort(m.begin(),m.end(),comparator_1);
    cout<< m[0] << endl << m[1] << endl << m[2] <<endl;
    cout<<"*************"<<endl;
    sort(m.begin(),m.end(),comparator_2());
    cout<< m[0] << endl << m[1] << endl << m[2] <<endl;
    return 0;
}

输入

前两行是一个2*2矩阵

之后三行是一个3*4矩阵

最后两行是一个2*2矩阵

输出

先按照元素个数从小到大输出三个矩阵(大小相同时后创建的矩阵先输出)

再按照元素之和从小到大输出三个矩阵(大小相同时后创建的矩阵先输出)

再按照矩阵创建顺序从先到后输出三个矩阵

(矩阵排列方式与输入相同,每个元素后用一个空格进行分隔)

样例输入

2 3
3 4
 0 12 -3 -4
-2  2 -1  0
-1 -1 -1 -1
-1 3
-2 4

样例输出

-1 3
-2 4

2 3
3 4

0 12 -3 -4
-2 2 -1 0
-1 -1 -1 -1

*************
0 12 -3 -4
-2 2 -1 0
-1 -1 -1 -1

-1 3
-2 4

2 3
3 4

*************
2 3
3 4

0 12 -3 -4
-2 2 -1 0
-1 -1 -1 -1

-1 3
-2 4
  • 写回答

1条回答 默认 最新

  • threenewbee 2019-04-28 12:49
    关注
    // Q759043.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    class Mat{
        int h,w;
    public:
        Mat(int height,int width):h(height),w(width)
    // 在此处补充你的代码
        {
            p = new int[h * w];
            id = ++cnt;
        }
        int *p;
        int id;
        friend istream& operator>> (istream&, Mat&);
        friend ostream& operator<< (ostream&, Mat&);
        friend bool comparator_1(Mat a, Mat b);
        friend bool comparator_2(Mat a, Mat b);
        bool operator< (const Mat& other) const 
        {
            return h * w < other.h * other.w;
        }
        static int cnt;
    };
    
    int Mat::cnt = 0;
    
    istream& operator >> (istream& input, Mat& m)
    {
        for (int i = 0; i < m.h * m.w; i++)
            input >> m.p[i];
        return input;
    }
    
    ostream& operator<<(ostream& output, Mat& m)
    {
        for (int i = 0; i < m.h; i++)
        {
            for (int j = 0; j < m.w; j++)
                output << m.p[i * m.w + j] << " ";
            output << endl;
        }
        return output;
    }
    
    bool comparator_1(Mat a, Mat b) {
        int sum1 = 0;
        for (int i = 0; i < a.h * a.w; i++)
            sum1 += a.p[i];
        int sum2 = 0;
        for (int i = 0; i < b.h * b.w; i++)
            sum2 += b.p[i];
        return sum1 < sum2;
    }
    
    bool comparator_2(Mat a, Mat b) {
        return a.id < b.id;
    }
    
    int main()
    {
        vector<Mat> m;
        m.push_back(Mat(2,2));
        m.push_back(Mat(3,4));
        m.push_back(Mat(2,2));
        cin >> m[0] >> m[1] >> m[2];
        sort(m.begin(),m.end());
        cout<< m[0] << endl << m[1] << endl << m[2] <<endl;
        cout<<"*************"<<endl;
        sort(m.begin(),m.end(),comparator_1);
        cout<< m[0] << endl << m[1] << endl << m[2] <<endl;
        cout<<"*************"<<endl;
        sort(m.begin(),m.end(),comparator_2);
        cout<< m[0] << endl << m[1] << endl << m[2] <<endl;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器