C++如何实现按照列名为group的这一列来对矩阵分组然后计算每一组的和
要实现按照列名为group的这一列来对矩阵分组,并计算每一组的和,可以使用C++的STL库中的unordered_map来实现。
首先,我们需要定义一个结构体来表示矩阵的每一行,其中包含矩阵的列名和对应的数值。
struct Row {
string group;
int value;
};
然后,我们可以使用vector来表示整个矩阵,每个元素都是一个Row结构体。
vector<Row> matrix;
接下来,我们可以使用一个unordered_map来将矩阵按照group列进行分组,key为group的值,value为该组的所有行。
unordered_map<string, vector<Row>> groups;
然后,我们可以遍历矩阵的每一行,将每一行添加到对应的组中。
for (const auto& row : matrix) {
groups[row.group].push_back(row);
}
最后,我们可以遍历每一组,并计算每一组的和。
for (const auto& entry : groups) {
const auto& groupName = entry.first;
const auto& rows = entry.second;
int sum = 0;
for (const auto& row : rows) {
sum += row.value;
}
cout << "Group: " << groupName << ", Sum: " << sum << endl;
}
完整的代码如下:
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
using namespace std;
struct Row {
string group;
int value;
};
int main() {
vector<Row> matrix = {
{"A", 1},
{"B", 2},
{"A", 3},
{"B", 4},
{"C", 5},
{"C", 6}
};
unordered_map<string, vector<Row>> groups;
for (const auto& row : matrix) {
groups[row.group].push_back(row);
}
for (const auto& entry : groups) {
const auto& groupName = entry.first;
const auto& rows = entry.second;
int sum = 0;
for (const auto& row : rows) {
sum += row.value;
}
cout << "Group: " << groupName << ", Sum: " << sum << endl;
}
return 0;
}
输出结果为:
Group: A, Sum: 4
Group: B, Sum: 6
Group: C, Sum: 11
``
原文地址: http://www.cveoy.top/t/topic/ioz6 著作权归作者所有。请勿转载和采集!