2017-10-24 13 views
0

文字列に一連の単語が順番に挿入されています。さて、私は最も反復した言葉を探したいと思います。もしネクタイがあれば、前の言葉を使ってください。挿入順序に基づいて最初に繰り返される単語

コード:https://ideone.com/S5yOBk

#include <iostream> 
#include <map> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string line = "paper block book chair"; 
    map<string, int> frequencyMap; 

     istringstream stream(line); 
     string word; 

     while (stream >> word) 
     { 
      ++frequencyMap[word]; 
     } 

     string maxRep; int c = 0; 
     for (auto& t : frequencyMap) { 
      if (t.second > c) { 
       maxRep = t.first; 
       c = t.second; 
      } 
     } 

    cout << "First Most repeated word is: " << maxRep << endl; 
} 

の予想される出力は、この場合の "紙" ですが、私は "ブロック" を得続けます。

+0

リピートがない場合は、どのように繰り返し単語が出るのかわかりません。 –

+0

デバッガ。デバッガを使用します。デバッガは、コードを一歩一歩進めるのに役立ちます。デバッグは、StackOverflowへの投稿や、誰かがあなたのためにあなたのプログラムを調べたり、デバッグするのを待つよりも速いことがよくあります。 **あなたの投稿をデバッグセッションのテキスト結果で**編集してください。 –

答えて

3

マップに挿入する順序に基づいて、どの要素が最初にマップに表示されるかを判断することはできません。広告掲載オーダーを保持するフィールドを確認するには、別のフィールドを使用することを検討する必要があります。

このような簡単な解決策があります: -

#include <iostream> 
#include <map> 
#include <sstream> 
using namespace std; 

int main() 
{ 
    string line = "paper block book chair"; 
    map<string, pair<int,int>> frequencyMap; 

     istringstream stream(line); 
     string word; 
     int i = 0; 
     while (stream >> word) 
     { 
      if(frequencyMap.count(word)==0) 
      frequencyMap[word]=pair<int,int>(i++,1); 
      else 
       frequencyMap[word].second++; 
     } 

    string maxRep; int c = 0,ord=10000000;// max elements inserted+1 
    for (auto& t : frequencyMap) { 
     if (t.second.second > c ||(t.second.second==c && t.second.first < ord)) { 
      maxRep = t.first; 
      ord = t.second.first; 
      c = t.second.second; 
     } 
    } 

    cout << "First Most repeated word is: " << maxRep << endl; 
} 

Output: 
paper 
0

のstd ::マップはBSTの一種のベースであるが、すべての最初のクラスは店がに「opetator <」を持っている必要がありますBSTを注文します。 std :: stringは辞書順に並べられます。

文字列と挿入時間を含む新しいクラスを作成し、挿入時間によって2つの要素を比較するので、std :: mapは時間を挿入して並べ替えられます。

関連する問題