2016-09-27 8 views
0

私は現在、テキストのファイルを取り込み、すべての単語をそれ自身の値に整理して何回発生するかを示すプログラムに取り組んでいます。私はかなりの時間このアイデアで遊んできたし、基本的な実装を過ぎることはできません。私はMAPとSETを使うのが非常に新しいので、SETは各単語の1回の出現を保持し、MAPはその単語自体をキーとして使用することができ、それが繰り返される回数はデータ型です。しかし、これを達成するためには、私は非常に迷っています。私のコードは不完全で、私は立ち往生しています。私がしようとしたのは、SET内の各単語を保存し、その単語をマップの元の値に即座にマップする方法を見つけ出すことでした。それを捕まえて、MAP KEY-VALUEペアを1つ増やしてください。単語を再現するためにSTLマップとセットを使用する

例:誰も私を助けることができれば

#include <iostream> 
#include <vector> 
#include <map> 
#include <set> 
using namespace std; 

int main() 
{ 
    map<string, int> testMap; 
    vector<string> text; 
    set<string> words; 
    int datVal = 1; 

    text.push_back("Hi"); 
    text.push_back("Hi"); 
    text.push_back("Bye"); 
    text.push_back("test"); 
    text.push_back("ice"); 
    text.push_back("pie"); 
    text.push_back("pie"); 
    text.push_back("cheese"); 
    text.push_back("wampum"); 

    for(int x = 0; x < text.size(); x++) 
    { 
    words.insert(text[x]); 
    if(
    testMap.insert(make_pair(text[x], datVal)).second; 

    } 

が、私はそれを大幅にいただければ幸いです!私はセットをチェックし、マップにリンクされた値を増やす方法を理解していない、私は学ぶべきことがたくさんある。あなたの時間をありがとう!

答えて

1

あなたの単語データを含むstd::vector<std::string>があるとします。このベクトルの単語のヒストグラムを作成する場合は、std::map<std::string, unsigned int>を使用すると、このメソッドに渡されたキーに対応する値への参照にアクセスするstd::map::operator[]を使用してマップインスタンスを調べることで、単純で効率的ですifそれは、すでにマップ内に含まれていません。

int main() { 
    std::vector<std::string> words; // populated somewhere 
    std::map<std::string, unsigned int> word_histogram; // store word with associated count 
    for (const auto& word : words) ++word_histogram[word]; // find word and increment count 
} 

これはstd::vector言葉に含まれる単語のヒストグラムになります。 のアイテムの注文に気にしない場合は、std::unordered_map::operator[]の平均ケースの複雑さは一定であるが、std::map::operator[]のコンテナサイズでは対数であるため、代わりにstd::unordered_map<std::string, unsigned int>を使用してください。

上記のコードを使用して質問の冒頭に記載したように、あなたの要件に余分なものを使用する必要はありません。

関連する問題