首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用vector<vector<int>> c++对二维矩阵的和进行排序?

使用vector<vector<int>> c++对二维矩阵的和进行排序可以按照以下步骤进行:

  1. 创建一个二维矩阵的vector<vector<int>>对象,命名为matrix。
  2. 遍历matrix,计算每一行的和,并将和存储在一个新的vector<int>对象中,命名为rowSums。
  3. 创建一个新的vector<pair<int, int>>对象,命名为sumIndexPairs,用于存储每一行和的索引对。
  4. 遍历rowSums,将每个和与其对应的索引插入sumIndexPairs中。
  5. 使用自定义的比较函数对sumIndexPairs进行排序,按照和的大小进行降序排序。
  6. 创建一个新的vector<vector<int>>对象,命名为sortedMatrix,用于存储排序后的矩阵。
  7. 遍历sumIndexPairs,根据索引对的顺序,将matrix中对应的行插入sortedMatrix中。
  8. 最后,sortedMatrix即为按照矩阵和排序后的结果。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>
#include <vector>
#include <algorithm>

bool compare(const std::pair<int, int>& a, const std::pair<int, int>& b) {
    return a.first > b.first; // 按照和的大小进行降序排序
}

std::vector<std::vector<int>> sortMatrixBySum(std::vector<std::vector<int>>& matrix) {
    std::vector<int> rowSums;
    std::vector<std::pair<int, int>> sumIndexPairs;

    // 计算每一行的和,并存储在rowSums中
    for (const auto& row : matrix) {
        int sum = 0;
        for (const auto& num : row) {
            sum += num;
        }
        rowSums.push_back(sum);
    }

    // 构建和与索引的对,并存储在sumIndexPairs中
    for (int i = 0; i < rowSums.size(); i++) {
        sumIndexPairs.push_back(std::make_pair(rowSums[i], i));
    }

    // 按照和的大小进行排序
    std::sort(sumIndexPairs.begin(), sumIndexPairs.end(), compare);

    std::vector<std::vector<int>> sortedMatrix;
    // 根据索引对的顺序,将matrix中对应的行插入sortedMatrix中
    for (const auto& pair : sumIndexPairs) {
        sortedMatrix.push_back(matrix[pair.second]);
    }

    return sortedMatrix;
}

int main() {
    std::vector<std::vector<int>> matrix = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    std::vector<std::vector<int>> sortedMatrix = sortMatrixBySum(matrix);

    // 输出排序后的矩阵
    for (const auto& row : sortedMatrix) {
        for (const auto& num : row) {
            std::cout << num << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

这段代码使用了vector<vector<int>>来表示二维矩阵,计算每一行的和,并将和与索引构建成pair对象,然后按照和的大小进行排序,最后根据排序后的索引顺序重新构建矩阵。这样就实现了对二维矩阵的和进行排序的功能。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云C++ SDK:https://cloud.tencent.com/document/product/876/19399
  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库MySQL版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网通信(IoT Hub):https://cloud.tencent.com/product/iothub
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

使用 Python 按行按列矩阵进行排序

在本文中,我们将学习一个 python 程序来按行按列矩阵进行排序。 假设我们采用了一个输入 MxM 矩阵。我们现在将使用嵌套 for 循环给定输入矩阵进行逐行按列排序。...创建一个函数 sortMatrixRowandColumn() 通过接受输入矩阵 m(行数)作为参数来矩阵进行排序。...调用上面定义sortMatrixRowandColumn()函数,方法是将输入矩阵,m值传递给它,矩阵进行排序。...Python 给定矩阵进行排序。...此外,我们还学习了如何转置给定矩阵,以及如何使用嵌套 for 循环(而不是使用内置 sort() 方法)按行矩阵进行排序

5.9K50

C++】STL容器——探究List与Vector使用sort函数排序区别(14)

本章主要内容面向接触过C++老铁 主要内容含: 1.Sort函数接口 注意: Compare comp 参数可以决定是【 正序 】还是【 逆序 】 2.Sort函数接口使用(代码演示)...list分别的Sort函数区别 【1】vectorlist分别的Sort函数解析 区别: 使用上: listsort使用更方便lt2.sort();;vector分前后,要找迭代器sort(...v.begin(), v.end()); 效率上:在处理少量数据时候,vectorlistsort效率差不多;处理大量数据,vector要优于list; 【2】vectorlist分别的Sort函数使用...(代码演示) 说明 下面函数是设置N为数据量,然后分先后记录了vectorlist排序一段相同数据所需时间 最后得出【1】中结论:在处理少量数据时候,vectorlistsort效率差不多...C++计时函数,而与其相关数据类型是clock_t // 先拷贝到vector for (auto e : lt1) { v.push_back(e); } // 排序,验证vector

16410

C++版 - 剑指offer 面试题3:二维数组(矩阵)中数查找(leetcode 74. Search a 2D Matrix) 题解

tpId=13&tqId=11154 参与人数:11920   时间限制:1秒   空间限制:32768K 本题知识点:查找 题目描述 在一个二维数组中,每一行都按照从左到右递增顺序排序,每一列都按照从上到下递增顺序排序...请完成一个函数,输入这样一个二维数组一个整数,判断数组中是否含有该整数。...输入描述: array: 待查找二维数组 target:查找数字 输出描述: 查找到返回true,查找不到返回false 分析: 如果矩阵右上角值比target大,删除所在列,列号-1,在剩下元素中继续找...;如果矩阵右上角值不大于target,删除所在行,行号+1,在剩下元素中继续找,找到相等元素就退出....由于在线oj给C++版输入是向量,故不能直接使用C语言风格二维数组展开为一维方法。

90230

Leetcode-378.有序矩阵中第K小元素

题目描述 给定一个 n x n 矩阵,其中每行每列元素均按升序排序,找到矩阵中第k小元素。(从升序角度来看,第个k,k越大越靠后) 请注意,它是排序第k小元素,而不是第k个元素。...>步骤23类比一个tree递归操作,步骤3root节点进行排序,步骤1是每个子节点进行排序,每个子节点有是一棵树 4. heap[0]就是输出结果 Time Complexity:...遍历矩阵, Time Complexity: O(n2) space Complexity: O(k) 执行用时 :72 ms, 在所有 C++ 提交中击败了44.01% 用户 内存消耗 :13.2...MB, 在所有 C++ 提交中击败了23.17%用户 第一步:根据问题来优化(删除k-1小元素) Solution 3: priority_queue priority_queue<int,vector...,降序采用小顶堆) (每次排序内部不保证是有序,堆排序每次排序保证第k个元素) 2 部分排序 top k 快速排序排序组成 std::partial_sort std::nth_element

1.4K60

C++随记(四)---动态数组vector

基本上,它是使用new创建动态数组替代品,而且它确实就是用newdelete来管理内存,但是这种工作是自动完成,所以你使用vector时候完全就可以忘掉我前面两篇博文讲东西,直接拿来vector...回答是合法,我们甚至可以直接其值进行修改.如: cars[2] = 100; 依然合法,这样方式似乎合乎我们平时对于数组概念 不过我更推荐使用成员函数.at() cars.at(2) =...2、二维动态数组 用过MATLAB同学应该知道,MATLAB矩阵操作是非常便捷,但是C++中并没有矩阵这种概念,于是我们可以自己用二维数组代替矩阵进行一些简单操作。...如 vector > S; 就是一个二维动态数组,第一层vector元素是 vector,第二层vector元素是int 现在就可以把它当作矩阵了,比如S[2]...注意如前文中提到,如果要用S[2][3]=10;这样语句,一定要先二维数组进行初始化: ?

1.5K00

云课五分钟-0B快速排序C++示例代码-注释编译指令

最终遍历整个网格后,找到最长路径长度,即为结果。 您提供代码是一个在二维矩阵中寻找最长递增路径长度问题。...以下是一个使用C++实现快速排序示例代码: cpp复制代码 #include #include using namespace std; int...其中,partition函数用来确定基准元素位置,quickSort函数用来递归地左右子序列进行排序。最终,程序输出排好序数组。..., high); // 划分点左边部分进行递归排序 quickSort(arr, low, pi - 1); // 划分点右边部分进行递归排序 quickSort(arr, pi + 1,...当你在编译 C++ 代码时使用 -std=c++11 选项,你告诉编译器使用 C++11 标准来解析编译你代码。这样,你就可以在代码中使用 C++11 引入新特性语法。

12510

【刷题】前缀进阶

1 前言 今天我们继续加强前缀算法。 前缀算法是对数组进行预处理操作,进而避免大量重复操作!使得算法性能增强!...使用哈希算法 每次枚举都要对当前前缀对应个数进行 +1 这样以后调用就方便了 int subarraySum(vector& nums, int k) {...我们先来看二维前缀预处理如何来做: 这样需要注意一个小细节,我们进行预处理时,把dp矩阵多开一行一列可以极大简便我们对边界情况处理!!!...然后就是ans矩阵进行计算,那么就要找到左上角坐标(x1 , y1)右下角坐标(x2 , y2)。...找到两个坐标后,就可以来分析计算区域和了 vector> matrixBlockSum(vector>& mat, int k) { //二维前缀

7710

LeetCode笔记:566. Reshape the Matrix

给你一个由二维数组表示矩阵两个正数rc,分别表示想要重构成矩阵行数列数。 重构矩阵需要由所有原来矩阵元素以同样顺序填充。...如果根据给出参数进行重构操作是可能和合法,就输出重构出矩阵,否则就输出原始矩阵。...因此输出原始矩阵。 注意: 给出矩阵高宽在[1,100]范围内。 给出rc是正数。 思路: 也没什么特别的思路,就是遍历原二维数组,来按照数量建立新二位数组,C++中用容器实现。...代码(C++): class Solution { public: vector> matrixReshape(vector>& nums, int...: class Solution { public: vector> matrixReshape(vector>& nums, int r, int

35330

【面试高频题】难度 45,可逐步优化超热门面试题

从题面来看显然是一道「二维前缀题目,如果你还不了解「二维前缀」,可以看看 (题解)304....二维区域检索 - 矩阵不可变。本题预处理前缀复杂度为 。 搜索所有子矩阵需要枚举「矩形左上角」「矩形右下角」,复杂度是 。...(2021/04/20 Java 测试可通过,C++ 使用 vector 会 TLE)。...我们先不考虑「最大化二分收益」问题,先假设我们是固定枚举「上下行」「右边列」,这时候唯一能够确定一个子矩阵则是取决于「左边列」: 重点是如何与「一维」问题进行关联:显然「目标子矩阵」等于「子矩阵右边列...与 原矩阵左边列 形成矩阵」-「子矩阵左边列 与 原矩阵左边列 形成矩阵」 我们可以使用 area[r] 代表「子矩阵右边列 与 原矩阵左边列 形成矩阵」,使用 area[l

68930

一篇总结,搞定数组16道题目!

而且大家如果使用C++的话,要注意vector array区别,vector底层实现是array,严格来讲vector是容器,不是数组。 数组元素是不能删,只能覆盖。...那么二维数组直接上图,大家应该就知道怎么回事了 ? 那么二维数组在内存空间地址是连续么? 不同编程语言内存管理是不一样,以C++为例,在C++二维数组是连续分布,如图: ?...相关题目: 35.搜索插入位置 34.在排序数组中查找元素第一个最后一个位置 69.x 平方根 367.有效完全平方数 双指针法 27....C++vectorarray区别一定要弄清楚,vector底层实现是array,所以vector展现出友好一些都是因为经过包装了。...双指针法(快慢指针法)在数组链表操作中是非常常见,很多考察数组链表操作面试题,都使用双指针法。

58240

c++ sort 二维数组排序_二维数组升序排列

大家好,又见面了,我是你们朋友全栈君。 以往遇到行排列问题(按每行字典序排序时候,总是使用结构体来进行排序,但是如何使用二维数组来达到同样效果呢?...实验内容:利用二维数组进行“三级排序” 测试1:使用c++内置普通型二维数组 #include #include using namespace std;...分析原因,应该是数组名a一维数组名a[0]、a[1]均为const类型指针,排序时无法交换它们而导致错误。...测试3:利用STL中vector容器进行排序 即利用vector>容器模拟二维数组进行排序 #include #include #...cmp); for(auto p : vec) cout<<p[0]<<' '<<p[1]<<' '<<p[2]<<endl; return 0; } 看起来好像STL方便一些~ 总结:利用二维数组进行排序还是挺麻烦

1.6K30

1. 基础算法初识

1.1快速排序 ---- 思想: 先取一个中间任意值x,将需要排序序列划分为左右两个区间 以递增为例,使得左区间数都满足q[i]=x 然后左右两个区间分别排序最终得到递增序列...快速排序 原题链接 描述 给定你一个长度为 n 整数数列。 请你使用快速排序这个数列按照从小到大进行排序。 并将排好序数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。...[N]一个二维矩阵b[N][N],满足b[i][j]为以a[1][1]为左上角到以a[i][j]为右下角矩阵中所有元素,即b[i][j] = a[1][1] + a[1][2] + ... +...]; } } 应用及原理 对于一个二维数组,给定(x1,y1)(x2,y2),求以(x1,y1)为左上角到以(x2,y2)为右下角矩阵中所有元素 /* 给定一个二维数组a[N][N],...,对于给定区间端点,左端点进行排序 维护当前区间,当下一个区间左端点大于等于当前区间左端点时,只需判断下一个区间右端点,并更新区间 如果下一个区间左端点大于当前维护区间右端点,则更新区间为该区间

29830

1. 基础算法初识

快速排序 原题链接 描述 给定你一个长度为 n 整数数列。 请你使用快速排序这个数列按照从小到大进行排序。 并将排好序数列按顺序输出。 输入格式 输入共两行,第一行包含整数 n。...[N]一个二维矩阵b[N][N],满足b[i][j]为以a[1][1]为左上角到以a[i][j]为右下角矩阵中所有元素,即b[i][j] = a[1][1] + a[1][2] + ... +...i-1][j-1]; } } 应用及原理 对于一个二维数组,给定(x1,y1)(x2,y2),求以(x1,y1)为左上角到以(x2,y2)为右下角矩阵中所有元素 /* 给定一个二维数组...,以(x1,y1)为左上角到以(x2,y2)为右下角矩阵所有元素加或减一个常数c,可通过构造该二维数组二维差分数组来快速完成操作 /*给定一个二维数组a[N][N],构造其二维差分数组为b[...,对于给定区间端点,左端点进行排序 维护当前区间,当下一个区间左端点大于等于当前区间左端点时,只需判断下一个区间右端点,并更新区间 如果下一个区间左端点大于当前维护区间右端点,则更新区间为该区间

27320

C++STL中vector使用策略(二)

下面来看一道LeetCode上困难题——两个排序数组中位数        这道题只要掌握了vector基本用法以及常用成员函数,做起来不难,就是要细心        首先利用push_back...函数,将nums2依次插入到nums1尾部,然后利用sort(nums1.begin(),nums2.end())函数将合并后元素进行排序。...       锯齿矩阵是指每一行包含元素个数不相同矩阵,比如: 3 5 2 6 1 2 3 4 1 6 2 7 读入若干整数(x,y),表示在第x行末尾加上一个元素y。...vector向量,vector >vec,但是其实一个vector vec[1000]就能满足这题要求了,但是要先分清楚这几个区别 vector >vec;//vector里面每个元素都是vector,相当于二维vector vectorvec[1000];//开一个1000数组,里面每个元素是一个vector vector<int

66040
领券