我正在学习 vector ,现在我遇到了一个问题: 二进制 ==: 没有找到接受类型为“Object”的左手操作数的运算符。 删除后发现没有mustake了:
vector<Object>::iterator it = find(list.begin(), list.end(), name);
我不知道该怎么办。 也许你会问这样的问题
class Object {
private:
string* name;
vector<string>* facts;
public:
//...
}
class ListOfObjects {
private:
vector<Object> list;
public:
void Realise(string* knowledge);
};
void ListOfObjects::Realise(string* knowledge) {
//...
vector<Object>::iterator it = find(list.begin(), list.end(), name);
//...
}
最佳答案
问题是由 std::find
给出的利用 operator==
检查您正在搜索的元素是否存在于当前选择中。
由于您通过了 string*
然后编译std::find
时搜索的方法模板方法是
bool Object::operator==(string* argument) const
必须实现,它的实现类似于
bool Object::operator==(string* argument) const
{
return *argument == name;
}
但我发现此解决方案存在潜在问题:
- 您正在通过特定字段搜索集合中的元素,如果这是您使用的主要方式,那么另一个不同的集合会更好,例如
std::unordered_map<string, vector<string>>
,这将使一切变得更容易 - 你可以重载
operator==
参数的类型不同于您为其重载运算符的类型,虽然这有效并且可以使用它但在相等方面没有多大意义,因为您正在比较两种不同的类型 - 您正在使用
string*
大多数时候这没有意义(如果你想避免复制,请传递const std::string&
)
关于c++ - 二进制 == : no operator found which takes a left hand operand; vector; iterator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34708729/