【问题标题】:Cannot use <algorithm> find on vector of struct无法使用 <algorithm> 在结构的向量上查找
【发布时间】:2016-09-23 06:27:19
【问题描述】:

所以我无法使用 find 函数在我的结构向量中查找具有与指定的相同 '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')

【问题讨论】:

  • bool operator==(const code&amp; a) const code 是什么?
  • code这个类型是在哪里定义的?
  • 更好的数据结构可以是std::map&lt;char,std::string&gt; 或哈希映射。

标签: c++ algorithm vector struct iterator


【解决方案1】:

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

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

这将适当地使用find 函数。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢队友,修复了“bool operator==(const alpha& a) const”仍然有同样的错误:(
    • 他说你需要为ctor提供char类型的单个参数,可以用于类型转换。
    • 如果您的答案中有错误或不相关的信息,请将其删除。我看不出把它留在里面但划一条线的意义。
    • @BenjaminLindley OP 对此答案发表了评论,指的是已删除的部分。如果我完全删除它,就会混淆他们在说什么。如果 OP 决定删除他们的评论,我会删除它。
    【解决方案3】:

    你需要在你的结构体和一个字符之间定义一个相等运算符

    bool operator==(const char c) const
       {
          return letter == c;
       }
    

    【讨论】:

    • std::find() 是否保证value 会在表达式的右侧?
    • 是的,该函数使用 operator== 将各个元素与 val 进行比较
    • @Slava:是的。从 25.3.5/1 开始:"返回:范围 [first, last) 中满足以下相应条件的第一个迭代器 i:*i == value..."
    猜你喜欢
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2012-04-25
    • 2020-07-14
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    相关资源
    最近更新 更多