如何在一个向量中分配多个不同类型的变量或区分其类型

how to assign several different type variable in one vector or distinguish its type

本文关键字:变量 同类型 类型 分配 向量 一个      更新时间:2023-10-16

我在worldGiving.txt和OrganDonor.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 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++;
        }   
    }

但我遇到了一个问题,多个术语命名的国家,如"新西兰"answers"美国"分别分配在多个块,如"新","新西兰"。所以我不能恰当地比较两个文本文件。所以我认为如果我能区分它的类型是数值还是非数值,当它赋值给Vector时,我可以解决这个问题。我该怎么办?

如果您不能更改格式以更清楚地划分国家名称,您可以计算找到了多少项,并从末尾开始分配它们。找到值后剩下的部分应该加入到名称中。