c++ - operator== 和 vector 混淆

标签 c++

我在将对象保存在 vector 中时遇到了一些问题,我想我需要对运算符做些什么。

std::vector<Foo> vec;
Foo a = Foo();
vec.push_back(a);

...

if(std::find(vec.begin(), vec.end(), a) < vec.end()) {
    // Found
} else {
    // Not found
}

Foo 需要 operator== 来编译,我这样做

bool Foo::operator==(const Foo& rhs) {
    return this == &rhs;
}

但据我了解,vec.push_back 将复制 Foo 对象,因此我的 == 将返回 false。

因此,无论何时我开始搜索,都找不到。

在这里做什么是正确的?我希望避免切换到指针 vector 。

最佳答案

更改 Foo::operator== 的实现以比较 Foo 的成员变量是否相等,而不是检查身份。例如:

bool Foo::operator==(const Foo& rhs) const {
    return get_a() == rhs.get_a()
        && get_b() == rhs.get_b(); // and so on
}

请注意,这也可以是一个 const 函数,因为它不应修改任何成员变量,并且应该可用于 Foo 的 const 实例。

关于c++ - operator== 和 vector 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12659423/

相关文章:

c++ - 如何将成员函数指针传递给模板函数中的重载方法?

c++ - Qt c++ - 克隆一个对象

c++ - 如何使用 BOOST_MPL_ASSERT

c++ - 父类中子类的实例

c++ - 如何将整个结构设置为空?

c++ - 对自定义元素 vector 进行排序时的意外(至少对我而言)行为

c++ - 如何从docker中的程序记录主机桌面(ubuntu中的c++ opencv)?

c++ - Boost String Replace 不会用字符串替换换行符

c++ - 父类的复制构造函数中的嵌套类缺少默认构造函数

c++ - exFAT校验和的计算