私は入力の行を読み取るこの小さなプログラムを持っています&は、その中の単語を、それぞれの出現数で出力します。私は、それらの出現に応じてこれらの値を格納するマップ内の要素を並べ替える必要があります。つまり、一度しか出現しない言葉は、最初に出てくるように命じられ、次に2回目に出現する言葉が7回ほど続きます。私は、述語がブール値を返す必要があることを知っていますが、パラメータがどうあるべきかわかりません。マップの2つのイテレータでなければなりませんか?これを説明できる人がいれば、大いに感謝します。前もって感謝します。文字列から文字列へのマップの述語
#include<iostream>
#include<map>
using std::cout;
using std::cin;
using std::endl;
using std::string;
using std::map;
int main()
{
string s;
map<string,int> counters; //store each word & an associated counter
//read the input, keeping track of each word & how often we see it
while(cin>>s)
{
++counters[s];
}
//write the words & associated counts
for(map<string,int>::const_iterator iter = counters.begin();iter != counters.end();iter++)
{
cout<<iter->first<<"\t"<<iter->second<<endl;
}
return 0;
}
私はそれを行うための簡潔な構文があることを追加します: 'のstd ::ベクトル<はstd ::ペア> V(counters.begin()、counters.end()) ; ' –
これは、マップには述語がないことを意味しますか?もしこれが愚かな質問なら私を許してください、私はまだ学生です。 – Ramila
std :: mapに型パラメーターとして述部を与えることはできますが、その述部は値ではなくキーをソートするために使用されます。 std :: mapはソート述部を必要とするので、高速検索が可能です。 – hrnt