繁体   English   中英

在向量C ++上使用find()时发生编译器错误

[英]Compiler Error when using find() on a vector C++

我正在尝试一种采用字符串的方法,该方法将给出每个字符的字符频率并将其存储在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 请参阅http://en.cppreference.com/w/std::findstd::find_if的文档:

您将向量声明为:

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来使用谓词。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM