1

以下のコードは、文字列から最も多く出現する単語を提供します。カウント値を使用して、ベクトルから最も出現する 3 つの単語を取得したいと考えています。何か助けはありますか?

と を使用vectorunordered_mapました。コードの最後の部分で、 から最も多く出現する単語を取得しましvectorた。

int main(int argc,char *argv[])
    {
        typedef std::unordered_map<std::string,int> occurrences;
        occurrences s1;
        std::string input = argv[1];

        std::istringstream iss(std::move(input));
        std::vector<std::string> most;
        int max_count = 0,second=0,third=0;


//Here I get max_count, 2nd highest and 3rd highest count value 
       while (iss >> input)
        {
            int tmp = ++s1[input];
            if (tmp == max_count)
            {
                most.push_back(input);
            }
            else if (tmp > max_count)
            {
                max_count = tmp;
                most.clear();
                most.push_back(input);
                third = second;
                second = max_count;
            }
            else if (tmp > second)
            {
                third = second;
                second = tmp;
            }
            else if (tmp > third)
            {
                third = tmp;
            }
        }

//I have not used max_count, second, third below. I dont know how to access them for my purpose

      //Print each word with it's occurenece. This works fine 
      for (occurrences::const_iterator it = s1.cbegin();it != s1.cend(); ++it)
            std::cout << it->first << " : " << it->second << std::endl;;

      //Prints word which occurs max time. **Here I want to print 1st highest,2nd highest,3rd highest occuring word with there occurrence.  How to do?**
      std::cout << std::endl << "Maximum Occurrences" << std::endl;
        for (std::vector<std::string>::const_iterator it = most.cbegin(); it != most.cend(); ++it)
            std::cout << *it << std::endl;

       return 0;
    } 

最も出現頻度の高い 3 つの単語を取得する方法はありますか?

4

3 に答える 3

1

最も頻繁に出現する 3 つの単語を格納するためにヒープを使用する方が、より簡単でクリーンです。また、より多くの最も出現する単語に簡単に拡張できます。

于 2013-08-31T11:09:48.440 に答える
1

最も頻繁に出現する n 個の単語を知りたい場合は、n 要素の配列を用意し、単語のリストを反復処理して、上位 n になる単語を配列に格納します (最も低い単語を削除します)。

于 2013-08-31T11:12:02.280 に答える