我在将对象保存在 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/