Ошибка компилятора при использовании find () на векторе C ++

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
Теги:
find
vector

2 ответа

3
Лучший ответ

Вы должны использовать std::find_if если вы ищете элемент с функцией предиката. Смотрите документацию std::find и std::find_if по std::find_if http://en.cppreference.com/w/:

  • 0
    Спасибо! Это работает сейчас
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; });

EDIT: Как сказал nosid, вы должны использовать find_if для использования предиката.

  • 0
    Что std::find с лямбдой? :П

Ещё вопросы

Сообщество Overcoder
Наверх
Меню