1

私が実装しようとしている似たようなものの例を見つけました:

std::unordered_map<std::string,std::string> mymap = {
  {"us","United States"},
  {"uk","United Kingdom"},
  {"fr","France"},
  {"de","Germany"}
};

ただし、私が持っている値は CSV ファイルにあります。

これらの値を別のコンテナーに挿入してから unordered_map に追加する必要がありますか、それともファイルから直接追加することは可能ですか?

私はそれを理解するのに苦労しているので、現時点ではファイルの内容を画面に書き出すだけです:

int menuLoop = 1;
int userChoice;
string getInput;

while(menuLoop == 1)
{
    cout << "Menu\n\n" 
         << "1. 20\n"
         << "2. 100\n"
         << "3. 500\n"
         << "4. 1000\n"
         << "5. 10,000\n"
         << "6. 50,000\n\n";
    cin >> userChoice;

    if(userChoice == 1)
    {
        cout << "\n20\n\n";
        string getContent;
        ifstream openFile("20.txt");
        if(openFile.is_open())
        {
            while(!openFile.eof())
            {
                getline(openFile, getContent);
                cout << getContent << endl;
            }
        }
        system("PAUSE"); 
    }
}

ファイルの内容:

Bpgvjdfj,Bvfbyfzc
Zjmvxouu,Fsmotsaa
Xocbwmnd,Fcdlnmhb
Fsmotsaa,Zexyegma
Bvfbyfzc,Qkignteu
Uysmwjdb,Wzujllbk
Fwhbryyz,Byoifnrp
Klqljfrk,Bpgvjdfj
Qkignteu,Wgqtalnh
Wgqtalnh,Coyuhnbx
Sgtgyldw,Fwhbryyz
Coyuhnbx,Zjmvxouu
Zvjxfwkx,Sgtgyldw
Czeagvnj,Uysmwjdb
Oljgjisa,Dffkuztu
Zexyegma,Zvjxfwkx
Fcdlnmhb,Klqljfrk
Wzujllbk,Oljgjisa
Byoifnrp,Czeagvnj
4

2 に答える 2

2

データを抽出するには、CSVパーサーライブラリを使用するか、区切り文字としてコンマを使用してファイルの各行を手動で分割します。CSVファイルはテキストファイルと同じです。それらは、独特のデータ形式に従うだけです。

中間データ構造は不要です。データがの形式であると仮定して、ここ[key],[value]でunordered_mapのC ++ドキュメントを使用して、データを適切に挿入します。

例:

string line;
getline(file, line);

// simple split (alternatively, use strtok)
string key = line.substr(0,line.find(','));
string value = line.substr(line.find(',')+1);

unordered_map<string,string> mymap;
mymap[key] = value;

編集:区切り文字を使用したus2012のgetlineの方法も特に便利です。また、区切り文字をデータとして含むCSVを読み取る場合は、注意が必要であることに注意してください。多くの場合、引用符で囲まれた値で示されます。

"hello, world","hola","mundo"

CSV形式の詳細については、こちらをご覧ください

于 2013-01-24T23:43:06.547 に答える
2

で区切り文字を直接指定できますgetline

        while(true)
        {
            string key, value;
            //try to read key, if there is none, break
            if (!getline(openFile, key, ',')) break;
            //read value
            getline(openFile, value, '\n');
            mymap[key] = value;
            cout << key << ":" << value << endl;
        }

現在のループは、ファイルの最後にいるかどうかをチェックするのが遅すぎて、空のキーと値のペアが生成されることに注意してください。これは上に修正されています。

于 2013-01-24T23:57:23.477 に答える