C++ 如何在一个向量中分配多个不同类型的变量或区分其类型
我在worldGiving.txt和organProvider.txt中有两个不同的数据集,如下所示C++ 如何在一个向量中分配多个不同类型的变量或区分其类型,c++,vector,types,C++,Vector,Types,我在worldGiving.txt和organProvider.txt中有两个不同的数据集,如下所示 in worldGiving.txt Australia 60% 76% 2 37% 12 67% 10 Ireland 60% 79% 1 34% 15 66% 13 Canada 58% 64% 10 42% 7 67% 10 New Zealand 57% 66% 8 38% 11 68% 9 United S
in worldGiving.txt
Australia 60% 76% 2 37% 12 67% 10
Ireland 60% 79% 1 34% 15 66% 13
Canada 58% 64% 10 42% 7 67% 10
New Zealand 57% 66% 8 38% 11 68% 9
United States 57% 57% 13 42% 7 71% 3
Netherlands 53% 73% 3 34% 15 51% 49
Indonesia 52% 71% 5 41% 10 43% 77
United Kingdom 51% 72% 4 26% 35 56% 33
Paraguay 50% 48% 23 42% 7 61% 22
Denmark 49% 70% 7 23% 45 54% 43
Liberia 49% 12% 109 53% 2 81% 1
Iran 48% 51% 21 24% 41 70% 6
Turkmenistan 48% 30% 52 58% 1 56% 33
Qatar 47% 53% 17 17% 67 71% 3
Sri Lanka 47% 42% 30 43% 6 55% 38
Trinidad and Tobago 45% 44% 26 30% 23 62% 19
Finland 45% 50% 22 27% 30 57% 29
Philippines 45% 32% 47 44% 5 58% 26
Hong Kong 44% 64% 10 13% 87 56% 33
Oman 44% 39% 32 22% 48 72% 2
Cyprus 44% 56% 14 27% 30 48% 57
...
in organDonor.txt
Croatia 36,5
Spain 35,1
Belgium 32,9
Malta 30
Puerto Rico 26,3
USA 25,6
France 24,9
Estonia 24,3
Portugal 24
Norway 23,5
Slovenia 23
Austria 22,5
Italy 22,4
Finland 19,9
Czech Rep. 19,8
Lativa 19
UK 18,3
Ireland 17
Uruguay 16,5
Poland 16,1
Argentina 15,7
Australia 15,6
Netherlands 15,1
Sweden 15
Canada 14,7
Hungary 14,3
Lithuania 13,7
Denmark 13,4
Slovak Rep. 13,1
...
下面是我的代码
#include <sstream>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
string line;
vector<vector<string>> extractingData;
vector<vector<string>> extractingData2;
string pathExtract;
string pathStorage;
string pathMerged;
fstream extractingFile;
fstream extractingFile2;
void mergeData(vector<vector<string>> extractingData, vector<vector<string>> extractingData2, string pathStorage);
vector<vector<string>> ReadData(fstream& extractingFile, vector<vector<string>> extractingData, string pathExtract)
{
extractingFile.open(pathExtract);
int i = 0;
int index;
if (extractingFile.is_open())
{
while (getline(extractingFile, line))
{
istringstream iss(line);
extractingData.resize(i + 1);
int j = 0;
while (!iss.eof()){
extractingData[i].resize(j+1);
iss >> extractingData[i][j];
j++;
}
i++;
}
return extractingData;
}
}
int main() {
pathExtract = "worldGiving.txt";
pathStorage = "OrganDonors.txt";
pathMerged = "merged.txt";
extractingData=ReadData(extractingFile, extractingData, pathStorage);
extractingData2=ReadData(extractingFile2, extractingData2, pathExtract);
mergeData(extractingData, extractingData2, pathMerged);
}
void mergeData(vector<vector<string>> extractingData, vector<vector<string>> extractingData2, string pathStorage){
int i = 0;
int j = 0;
while (i<extractingData2.size() && i<extractingData.size())
{
cout << extractingData[i][0];
while (extractingData[i][0] != extractingData2[j][0] && j != extractingData2.size()-1)
{
j++;
}
if (extractingData[i][0] == extractingData2[j][0])
{
for (std::vector<string>::iterator it = extractingData2[j].begin()+1; it != extractingData2[j].end(); ++it)
{
/*auto back = std::move(extractingData2[j].back);
extractingData[i].push_back(std::move(back));*/
auto back = *it;
extractingData[i].push_back(back);
}
}
i++;
j = 0;
}
i = 0;
ofstream outFile(pathStorage);
while (i<extractingData2.size() && i<extractingData.size())
{
for (std::vector<string>::iterator it = extractingData[i].begin(); it != extractingData[i].end(); ++it) {
outFile << *it <<' ';
}
outFile << endl;
i++;
}
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
弦线;
矢量提取数据;
向量提取数据2;
字符串路径提取;
字符串路径存储;
字符串路径合并;
流提取文件;
流提取文件2;
void mergeData(向量提取数据、向量提取数据2、字符串路径存储);
向量读取数据(fstream&extractingFile、向量提取数据、字符串路径提取)
{
extractingFile.open(路径提取);
int i=0;
整数指数;
if(extractingFile.is_open())
{
while(getline(提取文件,行))
{
istringstream iss(线);
提取数据。调整大小(i+1);
int j=0;
而(!iss.eof()){
提取数据[i]。调整大小(j+1);
iss>>提取数据[i][j];
j++;
}
i++;
}
返回提取数据;
}
}
int main(){
pathExtract=“worldGiving.txt”;
pathStorage=“organsenders.txt”;
pathMerged=“merged.txt”;
extractingData=ReadData(extractingFile、extractingData、pathStorage);
extractingData2=ReadData(extractingFile2,extractingData2,pathExtract);
合并数据(提取数据、提取数据2、路径合并);
}
void mergeData(向量提取数据、向量提取数据2、字符串路径存储){
int i=0;
int j=0;
而(i如果您无法更改格式以更清晰地划分国家名称,则可以计算找到的项目数量并从末尾开始分配。找到值后剩余的内容应加入名称。您可以修改文件格式。使用其他符号(例如#)而不是分隔符的空间。所以新西兰#57%#66%#8%#38%#11#68%#9
不幸的是,我应该合并多个文本文件。所以我不能全部合并。哦,我明白了。如果有一些不规则长度的数组,我可以感觉到它是几个命名为国家的术语。谢谢。