このプログラムは、ペアをマップに格納し、単語の出現回数をカウントします。目標は、データを出現回数でソートし、値/文字列形式で出力することです。法線マップは明らかに文字列キーでソートされるため、逆にする必要がありました。
これを行うために、私は言葉を読み、それらの値をマップで適切に増やします。次に、マルチマップを作成し、ペアをマップからマルチマップにコピーしますが、逆にします。次に、マルチマップを反復処理して、ペアを出力します。ただし、ペアを出力しようとすると実行時エラーが発生し、その理由がわかりません。
コードは次のとおりです。
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main()
{
map<string, int> words;
multimap<int, string> words2;
string s;
while (true) {
cin >> s;
if (s == "0") break;
++words[s];
}
map<string, int>::iterator p;
for (p = words.begin(); p!=words.end(); ++p)
words2.insert(make_pair(p->second, p->first));
multimap<int, string>::iterator p2;
for (p2 = words2.begin(); p2!=words2.end(); ++p2)
cout << p->first << ": " << p->second << '\n';
}
どんな助けでも大歓迎です。
PS私は、マルチマップがキーの複数の出現(最初にそれを使用した理由です)および/または単一のキーで複数の値を持つことができることをさまざまな場所で読みました。どちらが正しいか、または両方が正しいかについて、いくつかの明確化が必要です。
また、マップのコピー アルゴリズムの種類はありますか? 簡単にするために for ループを使用することにしました。おそらくカスタム コピーを作成するのはかなり簡単でしょうが、(マップを他のペア コンテナーにコピーし、出力にコピーするため)