Я пытаюсь иметь метод, который берет строку и будет давать частоту символов каждого символа и хранить его в 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
Вы должны использовать std::find_if
если вы ищете элемент с функцией предиката. Смотрите документацию std::find
и std::find_if
по std::find_if
http://en.cppreference.com/w/:
Вы объявили вектор как:
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; });
EDIT: Как сказал nosid, вы должны использовать find_if
для использования предиката.
std::find
с лямбдой? :П