用C++实现按照列名为group的这一列来分组然后对矩阵求和
以下是使用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函数进行分组和求和,并打印结果
原文地址: http://www.cveoy.top/t/topic/ioz3 著作权归作者所有。请勿转载和采集!