我正在尝试使用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编程有点新,所以等待你的帮助。
答案 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;
}
我也缩短了属性的实现,它更加清晰:
return x;
而不是:
if (x)
return true;
else
return false;