0

文字列を取り、各文字の文字頻度を与え、それを2D配列または2Dベクトルに格納するメソッドを試しています。コードを実行するとコンパイラ エラーが発生し続け、何を言っているのかわかりません。エラーについていくつか調査しましたが、まだ問題を解決できていません。参照されるクラスが私のものではないため、何らかのヘッダーが欠落している必要があると思います。

 vector<pair<char, int>> CaesarCypher::charFreqGen(string inputFileName)
 {
     string input = GetInputString(inputFileName);
     vector<pair<char, int>> output;

     for (auto c : input)
     {
         auto it = find(output.begin(), output.end(),[=](const pair<int, char>& p) {return p.first == c; });
         if (it != output.end())
             it->second++;
         else
             output.push_back(std::make_pair(c, 1));
     }
     return output;
  }

これが私が受け取っているエラーです:

 Error  1   error C2678: binary '==' : no operator found which takes a left-hand operand of type 'std::pair<char,int>' (or there is no acceptable conversion)   c:\program files (x86)\microsoft visual studio 12.0\vc\include\xutility 3026    1   PA1_CaesarCypher
4

2 に答える 2

3

std::find_if述語関数で要素を検索する場合に使用する必要があります。std::findおよびhttp://en.cppreference.com/w/のドキュメントを参照しstd::find_ifてください。

于 2013-10-07T17:46:47.390 に答える
1

ベクトルを次のように宣言しました。

vector<pair<char, int>> output;

しかし、次に使用する場合find

auto it = find(output.begin(), output.end(),[=](const pair<int, char>& p) {return p.first == c; });

ペアのタイプを逆にしました。次のようにする必要があります。

auto it = find(output.begin(), output.end(),[=](const pair<char, int>&p) {return p.first == c; });

編集: nosid が言っfind_ifたように、述語を使用するには使用する必要があります。

于 2013-10-07T17:47:15.627 に答える