0

そのため、果物の名前と対応する数量のデータが typedef struct 配列に格納されてoverallfruit[].nameおりoverallfruit[].quantity、特定の数の配列があることを知っていますNUM

データを集計するにはどうすればよいstd::map<>ですか。つまり、同じ名前の果物を 1 か所にまとめて、それらの数量を一緒に追加しますか?

例: 配列に格納

{apple 5
pear 2
grape 6
mangoes 3
apple 2
mangoes 9}

だから私は得る

{apple 7
pear 2
grape 6
mangoes 12}
4

4 に答える 4

2

まずstd::string、キー (名前) とintデータ (数量) を使用してマップを作成します。次に、配列をループし、すべてのエントリについて、名前でインデックス付けされた数量をマップに追加します。

于 2013-09-24T08:26:14.237 に答える
-1

std::map を使用すると、インデックスは一意である必要があります。複数のペアを挿入しようとしても、何もしません。

あなたの質問では、次のようなものがうまくいくはずです:

std::map<string, int> fruits;
for(int i = 0; i<arraylenth; ++i) {
    fruits[overallfruit[i].name] += overallfruit[i].quantity; // add quantity to previous quantity if exists, or insert new map entry
}
于 2013-09-24T08:28:49.353 に答える
-2

私はあなたの質問を理解していないかもしれませんが、私が見ているのは次のようなものです:

std::map<std::string, unsigned int> fruitsMap;
for(std::size_t i = 0 ; i < NUM ; ++i) {
    std::map<std::string, unsigned int>::iterator it = fruitsMap.find(overallfruit[i].name);
    if(it == fruitsMap.end())
        fruitsMap[overallfruit[i].name] = overallfruit[i].quantity;
    else
        vIt->second += overallfruit[i].quantity;
}

配列を走査し、必要に応じてマップを埋めます。

于 2013-09-24T08:30:39.743 に答える