C++ 合并数据集:根据共有列名实现高效合并
{"title":"C++ 合并数据集:根据共有列名实现高效合并","description":"本文介绍如何使用 C++ 的 STL 库 (map 或 unordered_map) 根据共有列名合并多个数据集。代码示例展示了读取数据集、合并数据集以及输出结果的完整流程。","keywords":"C++, 数据合并, 数据集, 共有列名, STL, map, unordered_map, CSV 文件","content":"要按照共有列名合并多个数据集,可以使用C++的STL库中的map或unordered_map来存储每个数据集的行,然后遍历所有的数据集,根据共有列名将对应的行合并。\n\n以下是一个示例代码:\n\ncpp\n#include <iostream>\n#include <fstream>\n#include <sstream>\n#include <vector>\n#include <map>\n\nusing namespace std;\n\n// 定义数据行的类型\ntypedef map<string, string> DataRow;\n\n// 定义数据集的类型\ntypedef vector<DataRow> DataSet;\n\n// 读取数据集\nDataSet readDataSet(const string& filename) {\n ifstream file(filename);\n DataSet dataSet;\n\n if (file) {\n string line;\n // 读取列名\n getline(file, line);\n stringstream ss(line);\n vector<string> columnNames;\n string columnName;\n while (getline(ss, columnName, ',')) {\n columnNames.push_back(columnName);\n }\n\n // 读取数据行\n while (getline(file, line)) {\n DataRow row;\n stringstream ss(line);\n string cell;\n for (const auto& columnName : columnNames) {\n getline(ss, cell, ',');\n row[columnName] = cell;\n }\n dataSet.push_back(row);\n }\n\n file.close();\n }\n\n return dataSet;\n}\n\n// 合并数据集\nDataSet mergeDataSets(const vector<DataSet>& dataSets) {\n DataSet mergedDataSet;\n\n // 使用unordered_map存储每个数据集的行,以共有列名作为键\n unordered_map<string, DataRow> dataMap;\n\n // 遍历所有的数据集\n for (const auto& dataSet : dataSets) {\n // 遍历数据集的每一行\n for (const auto& row : dataSet) {\n // 使用共有列名构建键\n string key;\n for (const auto& column : row) {\n key += column.first + ":" + column.second + ",";\n }\n\n // 将行插入到map中\n dataMap[key] = row;\n }\n }\n\n // 将map中的行转换为向量\n for (const auto& pair : dataMap) {\n mergedDataSet.push_back(pair.second);\n }\n\n return mergedDataSet;\n}\n\n// 输出数据集\nvoid printDataSet(const DataSet& dataSet) {\n for (const auto& row : dataSet) {\n for (const auto& column : row) {\n cout << column.first << ": " << column.second << " ";\n }\n cout << endl;\n }\n}\n\nint main() {\n // 读取多个数据集\n DataSet dataSet1 = readDataSet("data1.csv");\n DataSet dataSet2 = readDataSet("data2.csv");\n DataSet dataSet3 = readDataSet("data3.csv");\n\n // 合并数据集\n vector<DataSet> dataSets = {dataSet1, dataSet2, dataSet3};\n DataSet mergedDataSet = mergeDataSets(dataSets);\n\n // 输出合并后的数据集\n printDataSet(mergedDataSet);\n\n return 0;\n}\n\n\n在上面的代码中,我们首先定义了数据行的类型DataRow和数据集的类型DataSet。然后使用readDataSet函数读取每个数据集,并将其存储为DataSet类型。接下来,我们使用mergeDataSets函数将所有的数据集合并为一个数据集。最后,使用printDataSet函数输出合并后的数据集。\n\n请注意,上述代码中使用的数据集是以逗号分隔的CSV文件,每一行代表一个数据行,第一行为列名。你需要根据实际情况修改代码以适应你的数据格式。"}
原文地址: https://www.cveoy.top/t/topic/pKjx 著作权归作者所有。请勿转载和采集!