我学习向量,现在我遇到了问题: binary ==:找不到哪个运算符采用类型'对象'的左手操作数。 我发现在删除之后没有任何故事:
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);
//...
}
答案 0 :(得分:1)
问题在于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&
)答案 1 :(得分:0)
我认为如果你想以这种方式比较对象,你会想要的是运算符重载。 这是一个简短的例子:
http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/
记下operator==
的使用方式