以下是使用C++实现按照列名为group的列来分组,并对矩阵进行求和的示例代码:

#include <iostream>
#include <vector>
#include <unordered_map>

std::vector<std::vector<int>> groupSum(std::vector<std::vector<int>>& matrix, int groupColumn) {
    std::unordered_map<int, std::vector<int>> groupMap;
    std::vector<std::vector<int>> result;
    
    // 分组
    for (const auto& row : matrix) {
        int group = row[groupColumn];
        groupMap[group].insert(groupMap[group].end(), row.begin(), row.end());
    }
    
    // 求和
    for (const auto& pair : groupMap) {
        const auto& groupValues = pair.second;
        std::vector<int> sumRow(matrix[0].size(), 0);
        
        for (int i = 0; i < groupValues.size(); i++) {
            sumRow[i % matrix[0].size()] += groupValues[i];
        }
        
        result.push_back(sumRow);
    }
    
    return result;
}

int main() {
    std::vector<std::vector<int>> matrix = {
        {1, 2, 3, 4},
        {2, 3, 4, 5},
        {1, 3, 5, 7},
        {2, 4, 6, 8}
    };
    
    int groupColumn = 0;
    
    std::vector<std::vector<int>> result = groupSum(matrix, groupColumn);
    
    for (const auto& row : result) {
        for (int value : row) {
            std::cout << value << " ";
        }
        std::cout << std::endl;
    }
    
    return 0;
}

在上述代码中,我们首先使用unordered_map来存储分组后的结果,其中键为group列的值,值为该分组的所有行的值拼接而成的向量。

然后,我们遍历分组后的结果,对每个分组的行进行求和。为了实现求和,我们创建了一个大小与原始矩阵行的大小相同的sumRow向量,并将每个分组的行的对应值累加到sumRow中。最后,将sumRow添加到结果向量中。

main函数中,我们定义了一个示例矩阵和要分组的列(在本例中为第一列)。然后,调用groupSum函数进行分组和求和,并打印结果

用C++实现按照列名为group的这一列来分组然后对矩阵求和

原文地址: http://www.cveoy.top/t/topic/ioz3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录