gpt4 book ai didi

C++ 重载运算符 ==

转载 作者:太空宇宙 更新时间:2023-11-03 10:28:54 28 4
gpt4 key购买 nike

我创建了一个类 Location .此类是类的父类 CityVillage . 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并且代码将被简化。

即使位置对象很大,也最好使用智能指针而不是原始指针。

希望对您有所帮助。

关于C++ 重载运算符 ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23537308/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com