不能在struct的vector上使用<algorithm> find

时间:2016-05-25 14:51:05

标签: c++ algorithm vector struct iterator

因此我无法使用find func在我的结构向量中找到一个节点,该节点具有与指定相同的'char'值。这是我的结构的代码,我正在重载比较运算符,但仍然没有运气

// STRUCT
struct alpha
{
   string morse;
   char letter;

   // overload the comparison operator
   bool operator==(const alpha& a) const
   {
      return letter == a.letter;
   }

};

这是我的迭代器的代码

void testFunc(vector<alpha> &vect)
{
   std::vector<alpha>::iterator it;

   it = find(vect.begin(), vect.end(),'e');
   if(it != vect.end())
   {
   // do anything if we ever get here
   }
}

任何帮助都会非常感激,我的代码甚至不会编译我得到错误

Invalid operands to binary expression ('alpha' and 'int')

3 个答案:

答案 0 :(得分:3)

您需要在struct和char

之间定义一个等于运算符
bool operator==(const char c) const
   {
      return letter == c;
   }

答案 1 :(得分:0)

std::find无法将char隐式转换为alpha。您需要提供将执行该转换的构造函数,或者提供您为alpha函数创建的find对象,或添加与operator==进行比较的另一个char函数}。

此外,您定义的operator==函数是否与code对象进行比较?那应该是正确的吗?

答案 2 :(得分:0)

find(vect.begin(), vect.end(),'e');中,find的第三个参数不是alpha个对象。你应事先构建这样一个对象:

alpha eKey;
eKey.letter='e';
vector<alpha>::iterator it = find(vect.begin(), vect.end(), eKey);

这将使得使用find函数。