重载操作符==
C++ Overload operator ==
我创建了一个类Location
。这个类是City
和Village
类的父类。Location
类是抽象的。我已经创建了一个vector<Location*> locations
,其中包含城市和村庄。Location
包含一个名称。如果两个位置有相同的名称,则意味着它们是相同的。我为Location
重载了操作符==
。
bool operator==(const Location& lhs) const
{
return (this->mName.compare(lhs.mName) == 0);
}
如果我想添加一些位置到vector
,我首先检查这个位置是否不存在。我使用这个函数:
bool checkLocation(Location* l) {
return find(locations.begin(), locations.end(), l) != locations.end();
}
例如,如果我想在vector
中添加某个城市,上面的方法仍然返回false
,这意味着Location
不存在。但是在vector
中有一个同名的城市。你能告诉我问题出在哪里吗?谢谢你!
由于vector存储指针,因此std::find
将比较指针,而不会调用Location::operator==()
来比较元素。
您需要使用std::find_if
和lambda:
return std::find_if(locations.begin(),
locations.end(),
[l](Location const *x) {
return *l == *x; //invoke operator=
}) != locations.end();
lambda对指针解引用,然后使用==
调用Location::operator=
。
如果位置对象不是很大,我建议你使用std::vector<Location>
而不是std::vector<Location*>
。如果您使用std::vector<Location>
,那么您可以使用std::find
,代码将被简化。
即使位置对象很大,最好使用智能指针而不是原始指针。
希望对你有帮助。
您将Location*
存储在vector
。find
算法将比较pointer
的值,而不是Location
对象中的名称。您必须为算法提供自定义比较器