我试图使用一个函数返回true / false如果一个元素在向量中,但我收到一个错误?

时间:2016-05-21 23:39:37

标签: oop c++ algorithm data-structures stl

我正在尝试使用STL在C ++中实现一个函数,它接受一个对象和一个对象向量,如果向量包含其他对象false,则返回true。以下是该功能的实现:

bool belongs(vertex V, std::vector<vertex> &array)
{
  std::vector<vertex>::iterator it;
  it = find(array.begin(), array.end(), V);
  if(it != array.end())
  {
    return true;
  }
  else
  {
    return false;
  }
}

但是,我收到此错误:

 invalid operands to binary expression ('vertex' and 'const vertex')
        if (*__first == __value_)

我该怎么办?我对使用面向对象编程的STL编程有点新,所以等待你的帮助。

1 个答案:

答案 0 :(得分:2)

主要问题是没有为顶点类型定义operator==find需要以确定2 vertex个实例是否相同)。您可以按如下方式定义一个:

#include <iomanip>
#include <iostream>
#include <vector>
#include <algorithm>

struct vertex
{
    float a, b;
    bool operator==(const vertex& o) const // <-- This method is what find is looking for
    {
        return a == o.a && b == o.b;
    }
};

bool belongs(vertex V, const std::vector<vertex>& array)
{
    return find(array.begin(), array.end(), V) != array.end();
}

int main()
{
    std::vector<vertex> v = { { 1, 2 }, { 3, 4 } };
    std::cout << std::boolalpha << belongs({ 4, 5 }, v);
    return 0;
}

Live on Coliru

我也缩短了属性的实现,它更加清晰:

return x;

而不是:

if (x)
    return true;
else
    return false;